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

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

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

Thông tin tài liệu

Giải thuật kiểm tra nhị phân tìm kiếm: Nhận thấy, nhị phân T nhị phân tìm kiếm : - Các trái phải T nhị phân tìm kiếm - Khóa gốc T lớn Max khố thuộc trái T - Khóa gốc T nhỏ Min khoá thuộc phải T Từ trình bày giả thuật sau: B1: Kiểm tra xem trái T có nhị phân tìm kiếm hay khơng ? Nếu khơng chuyển xuống B5 B2: Kiểm tra xem khóa gốc T có lớn Max khoá thuộc trái T, nhỏ Min khoá thuộc phải T hay không ? Nếu không chuyển xuống B5 B3: Kiểm tra xem phải T có nhị phân tìm kiếm hay khơng ? Nếu khơng chuyển xuống B5 B4: Kết luận T nhị phân tìm kiếm B5: Kết luận T nhị phân tìm kiếm Ngơn ngữ tựa C: TimMax(T, Max) // Tìm giá trị khố Max 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ị khố Min T { if (T==NULL) return; if (T->P_L != NULL) Min = (Min < T->P_L->KEY)? Min : T->P_L->KEY; 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 T nhị phân tìm kiếm { if (T==NULL) return 0; Left = KiemTra(T->P_L); If (Left) // Cây trái khơng nhị phân tìm kiếm return 1; if (T->P_L != NULL && T->P_R != NULL) // T Có { 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ó 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ó trái { TimMax(T->P_L, MaxL); if (!(MaxL < T->KEY)) return 1; } Right = KiemTra(T->P_R); return Left + Right; } 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 sử dụng stact S, trỏ T, lúc đầu T = -1 { Đọc thành phần X biểu thức; if (X toán hạng) printf(X); else if (X phép toán) { if ((T>-1) && (S[T] phép tốn có độ ưu tiên cao X)) printf(POP(S, T)); if ((T==-1) || (S[T]==’(’ || (S[T] phép tốn có độ ưu tiên thấp X)) PUSH (S, T, X); } while (phép toán X đưa vào S) else if (X dấu ‘(‘) PUSH (S, T, X); else if (X dấu ‘)‘) { printf(POP(S, T)); // in phép toán while (S[T]==’)’); POP(S, T)); loại dấu ‘)’ khỏi S } } while (chưa gặp dấu kết thúc biểu thức dạng trung tố); printf(POP(S, T)); // in phép toán while (T>-1); } TT_GIUA_S(T) // Hàm không đệ qui duyệt theo thứ tự if (T == NULL) // 1- Khởi đầu { printf(‘Cây rỗng’); return; } else { TOP = -1; P=T; } while ((P!=NULL) || (TOP>-1)) // - Thực duyệt { while (P != NULL) // Lưu trữ địa gốc, xuống trái { PUSH(S, TOP,P); P= P->P_L; } // Thăm gốc, xuống phải P= POP(S, TOP); printf(P->DATA); P= P->P_R } } ... if (!(MaxL < T->KEY)) return 1; } Right = KiemTra(T->P_R); return Left + Right; } 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 sử dụng stact S, trỏ... Min); TimMin(T->P_R, Min); } KiemTra(T)//Nếu kết T nhị phân tìm kiếm { if (T==NULL) return 0; Left = KiemTra(T->P_L); If (Left) // Cây trái khơng nhị phân tìm kiếm return 1; if (T->P_L != NULL... dạng trung tố); printf(POP(S, T)); // in phép tốn while (T>-1); } TT _GIUA_ S(T) // Hàm khơng đệ qui duyệt theo thứ tự if (T == NULL) // 1- Khởi đầu { printf(‘Cây rỗng’); return; } else { TOP =

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

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan