Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 7 trình bày nội dung về cây nhị phân tìm kiếm, cây nhị phân tìm kiếm cân bằng: định nghĩa, cấu trúc dữ liệu, các thao tác trên cây nhị phân tìm kiếm, Các trường hợp mất cân bằng. Kính mời quý đọc giả tham khảo nội dung chi tiết.
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải NỘIMaster DUNGTitle Style Click To Edit CÂY NHỊ PHÂN TÌM KIẾM CÂY NHỊ PHÂN TÌM KIẾM CÂN BẰNG Ðịnh nghĩaTo nhị Master phân tìm Title kiếm Click Edit Style • Cây nhị phân • Bảo đảm ngun tắc bố trí khố nút: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải – Các nút trái nhỏ nút hành – Các nút phải lớn nút hành Ví dụ: 18 13 37 15 23 40 Ưu Click điểm phân tìm kiếm To Editnhị Master Title Style • Nhờ trật tự bố trí khóa : – Định hướng tìm kiếm CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải • Cây gồm N phần tử : – Trường hợp tốt h = log2N – Trường hợp xấu h = Ln – Tình xảy trường hợp xấu ? CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CấuClick trúc củaMaster nhị Title phân Style tìm kiếm Toliệu Edit • Cấu trúc liệu nút typedef struct tagTNode { int Key; //trường liệu số nguyên struct tagTNode *pLeft; struct tagTNode *pRight; }TNode; • Cấu trúc liệu typedef TNode *TREE; CácClick thao tác nhị phân tìmStyle kiếm To Editcây Master Title Tạo rỗng CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Tạo nút có trường Key x Thêm nút vào nhị phân tìm kiếm Xố nút có Key x Tìm nút có khố x CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải TạoClick rỗng To Edit Master Title Style • Cây rỗng -> địa nút gốc NULL void CreateTree(TREE &T) { T=NULL; } CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải TạoClick nút To có Key x Editbằng Master Title Style TNode *CreateTNode(int x) { TNode *p; p = new TNode; //cấp phát vùng nhớ động if(p==NULL) exit(1); // thoát else { p->key = x; //gán trường liệu nút = x p->pLeft = NULL; p->pRight = NULL; } return p; } Thêm mộtTo nútEdit x Click Master Title Style • Rằng buộc: Sau thêm đảm bảo CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải nhị phân tìm kiếm int insertNode(TREE &T, Data X) { if(T) { if(T->Key == X) return 0; if(T->Key > X) return insertNode(T->pLeft, X); else return insertNode(T->pRight, X);} T = new TNode; if(T == NULL) return -1; T->Key = X; T->pLeft =T->pRight = NULL; return 1; } Minh họa thêm phần tử vàoTitle Click To Edit Master 44 < X 44 Theâm X=50 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải 18 13 88 > X 37 15 23 59 > X 40 55 55 > X 50 Style 88 59 108 71 Cấu trúc liệu thuật giải CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT TìmClick nút có khố bằngMaster x (không dùng quy) To Edit TitleđệStyle TNode * searchNode(TREE Root, Data x) { Node *p = Root; while (p != NULL) { if(x == p->Key) return p; else if(x < p->Key) p = p->pLeft; else p = p->pRight; } return NULL; } 10 CácClick trường cân lệch trái Tohợp Edit Master Title Style Cây cân nút T T TH1: Left-Left CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải T1 L1 TH2: Left-Right R T T1 R R1 T2 L1 L21 24 R21 CácClick trường cân lệch phải Tohợp Edit Master Title Style Cây cân nút T TH3: Right-Right TH4: Right-Left T CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải T L L T1 L1 T1 T2 R1 L21 25 R1 R21 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CácClick thaoTo tácEdit Master cânTitle bằngStyle Khi thêm hay xoá nút cây, cĩ thể làm cho tính cân bằng, ta phải tiến hành cân lại Cây có khả cân thay đổi chiều cao: Lệch nhánh trái, thêm bên trái Lệch nhánh phải, thêm bên phải Lệch nhánh trái, hủy bên phải Lệch nhánh phải, hủy bên trái Cân lại : tìm cách bố trí lại cho chiều cao cân đối: Kéo nhánh cao bù cho nhánh thấp 26 CânClick bằngTo lạiEdit trường hợp 1Title Style Master T T1 T1 R T CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải L1 L1 R1 R1 27 R CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CàiClick đặt cân lại cho trường hợp To Edit Master Title Style void LL(AVLTree &T) { AVLNode *T1=T->pLeft; T->pLeft = T1->pRight; T1->pRight=T; switch(T1-> balFactor) { case LH: T-> balFactor =EH; T1->balFactor=EH; break; case EH: T->balFactor=LH; T1->balFactor =RH; break; } T=T1; 28 } CânClick bằngTo lạiEdit trường hợp 2Title Style Master T T2 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải T1 R T1 T2 L1 L1 L21 R21 29 T L21 R21 R CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CàiClick đặt cân lại cho trường hợp To Edit Master Title Style void LR(AVLTree &T) { AVLNode *T1=T->pLeft; AVLNode *T2=T1->pRight; T->pLeft=T2->pRight; T2->pRight=T; T1->pRight= T2->pLeft; T2->pLeft = T1; switch(T2->balFactor) { case LH: T->balFactor=RH; T1->balFactor=EH; break; case EH: T->balFactor = EH; T1->balFactor=EH; break; case RH: T->balFactor =EH; T1->balFactor= LH; break; }T2->balFactor =EH; T=T2 30 } CânClick bằngTo lạiEdit trường hợp 3Title Style Master T T1 L T1 R1 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải T L1 R1 L 31 L1 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CàiClick đặt cân lại cho trường hợp To Edit Master Title Style void RR(AVLTree &T) { AVLNode *T1= T->pRight; T->pRight=T1->pLeft; T1->pLeft=T; switch(T1-> balFactor) { case RH: T-> balFactor = EH; T-> balFactor = EH; break; case EH: T-> balFactor = RH; T1-> balFactor = LH; break; } T=T1 32 } CânClick bằngTo lạiEdit trường hợp 4Title Style Master T T2 L T1 T1 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải T T2 R1 L L21 R21 33 L21 R21 R1 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CàiClick đặt cân lại cho trường hợp To Edit Master Title Style void RR(AVLTree &T) { AVLNode *T1= T->pRight; AVLNode *T2=T1->pLeft; T->pRight = T2->pLeft; T2->pLeft = T; T1->pLeft = T2->pRight; T2->pRight = T1; switch(T2-> balFactor) { case RH: T-> balFactor = LH; T1-> balFactor = EH; break; case EH: T-> balFactor = EH; T1-> balFactor = EH; break; case LH: T-> balFactor = EH; T1-> balFactor = RH; break; } T2-> balFactor =EH; T=T2;} 34 Thêm nút Click To Edit Master Title Style Thêm bình thường trường hợp NPTK Nếu tăng trưởng chiều cao CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Lần ngược gốc để phát nút bị cân Tiến hành cân lại nút thao tác cân thích hợp Việc cân lại cần thực lần nơi cân 35 HủyClick nútTo Edit Master Title Style Hủy bình thường trường hợp NPTK Nếu giảm chiều cao: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Lần ngược gốc để phát nút bị cân Tiến hành cân lại nút thao tác cân thích hợp Tiếp tục lần ngược lên nút cha… Việc cân lại co thể lan truyền lên tận gốc 36 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CâuClick hỏi tậpMaster Title Style ToBài Edit Hãy trình bày định nghĩa, đặc điểm hạn chế nhị phân tìm kiếm Xét thuật giải tạo nhị phân tìm kiếm Nếu thứ tự khóa nhập vào sau: 20 11 30 18 hình ảnh tạo nào? Sau đó, hủy nút 5, 20 thay đổi bước hủy, vẽ sơ đồ 37 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CâuClick hỏi tậpMaster Title Style ToBài Edit Cài đặt chương trình mơ trực quan thao tác nhị phân tìm kiếm Cài đặt chương trình mơ trực quan thao tác nhị phân tìm kiếm cân Viết chương trình cho phép tạo, tra cứu sửa chữa từ điển Anh-Việt 38 ... To Edit Style 44 Hủy X= 37 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải 18 13 88 59 37 15 23 55 15 108 71 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải HủyClick nút To có... nút có trường 44 Key = 18, lúc nút có khố 23 nút mạng CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải 18 13 88 59 37 15 23 40 55 30 17 108 71 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu. .. không CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải 44 23 Ví dụ: 88 13 59 37 15 30 40 21 55 108 71 Tổ Click chức To liệu Edit Master Title Style CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu