1. Trang chủ
  2. » Công Nghệ Thông Tin

Kiem tra cay nhi phan chuyen doi trung to sang hau to duyet cay thu tu giua

4 179 4

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 21,27 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giải thuật kiểm tra cây nhị phân tìm kiếm: Nhận thấy, cây nhị phân T là cây nhị phân tìm kiếm khi : - Các cây con trái và cây con phải của T đều là cây nhị phân tìm kiếm.. - Khóa tại gốc

Trang 1

Giải thuật kiểm tra cây nhị phân tìm kiếm:

Nhận thấy, cây nhị phân T là cây nhị phân tìm kiếm khi :

- Các cây con trái và cây con phải của T đều là cây nhị phân tìm kiếm.

- Khóa tại gốc T lớn hơn Max của các khoá thuộc cây con trái của T.

- Khóa tại gốc T nhỏ hơn Min của các khoá thuộc cây con phải của T.

Từ đó có thể trình bày giả thuật như sau:

B1: Kiểm tra xem cây con trái của T có là cây nhị phân tìm kiếm hay không ? Nếu không đúng thì chuyển xuống B5.

B2: Kiểm tra xem khóa tại gốc T có lớn hơn Max của các khoá thuộc cây con trái của

T, và nhỏ hơn Min của các khoá thuộc cây con phải của T hay không ? Nếu

không đúng thì chuyển xuống B5.

B3: Kiểm tra xem cây con phải của T có là cây nhị phân tìm kiếm hay không ? Nếu không đúng thì chuyển xuống B5.

B4: Kết luận T là cây nhị phân tìm kiếm.

B5: Kết luận T không phải là cây nhị phân tìm kiếm.

Ngôn ngữ tựa C:

TimMax(T, Max) // Tìm giá trị khoá Max của cây T

{

if (T==NULL)

return;

if (T->P_L != NULL)

Max = (Max > T->P_L->KEY)? Max : T->P_L->KEY;

if (T->P_R != NULL)

Max = (Max > T->P_R->KEY)? Max : T->P_R->KEY;

Max = (Max > T->KEY) ? Max : T->KEY;

TimMax(T->P_L, Max);

TimMax(T->P_R, Max);

}

TimMin(T, Min) // Tìm giá trị khoá Min của cây T

{

if (T==NULL)

Trang 2

if (T->P_R != NULL)

Min = (Min < T->P_R->KEY)? Min : T->P_R->KEY;

Min = (Min < T->KEY) ? Min : T->KEY;

TimMin(T->P_L, Min);

TimMin(T->P_R, Min);

}

KiemTra(T)//Nếu kết quả là 0 thì T là cây nhị phân tìm kiếm {

if (T==NULL)

return 0;

Left = KiemTra(T->P_L);

If (Left) // Cây con trái không là cây nhị phân tìm kiếm return 1;

if (T->P_L != NULL && T->P_R != NULL) // T Có 2 con

{

TimMax(T->P_L, MaxL);

TimMin(T->P_R, MinR);

if (!(MaxL < T->KEY && T->KEY < MinR))

return 1;

}

else

if (T->P_L == NULL && T->P_R != NULL)// Chỉ có con phải {

TimMin(T->P_R, MinR);

if (!(T->KEY < MinR))

return 1;

}

else

if (T->P_L != NULL && T->P_R == NULL)//Chỉ có con trái {

TimMax(T->P_L, MaxL);

if (!(MaxL < T->KEY)) return 1;

}

Right = KiemTra(T->P_R);

return Left + Right;

Trang 3

Giải thuật chuyển đổi biểu thức Trung tố sang Hậu tố:

CHUYEN_DOI_BIEU_THUC()

{//Giải thuật này sử dụng 1 stact S, trỏ bởi T, lúc đầu T = -1 do

{

Đọc thành phần X tiếp theo trong biểu thức;

if (X là toán hạng)

printf(X);

else if (X là phép toán)

do

{

if ((T>-1) && (S[T] là phép toán có độ ưu tiên

cao hơn X)) printf(POP(S, T));

if ((T==-1) || (S[T]==’(’ || (S[T] là phép toán có độ

ưu tiên thấp hơn X)) PUSH (S, T, X);

} while (phép toán X được đưa vào S)

else if (X là dấu ‘(‘)

PUSH (S, T, X);

else if (X là dấu ‘)‘)

{

do printf(POP(S, T)); // in ra các phép toán while (S[T]==’)’);

POP(S, T)); loại dấu ‘)’ ra khỏi S }

}

while (chưa gặp dấu kết thúc biểu thức dạng trung tố); do

printf(POP(S, T)); // in ra các phép toán

while (T>-1);

Trang 4

TT_GIUA_S(T) // Hàm không đệ qui duyệt cây theo thứ tự giữa

if (T == NULL) // 1- Khởi đầu

{

printf(‘Cây rỗng’);

return;

}

else

{

TOP = -1;

P=T;

}

while ((P!=NULL) || (TOP>-1)) // 2 - Thực hiện duyệt

{

while (P != NULL) // Lưu trữ địa chỉ gốc, xuống con trái {

PUSH(S, TOP,P);

P= P->P_L;

} // Thăm gốc, xuống con phải P= POP(S, TOP);

printf(P->DATA);

P= P->P_R }

}

Ngày đăng: 06/06/2018, 12:36

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w