23 40 55 71T/h 1: hủy X=

Một phần của tài liệu Bài giảng cấu trúc dữ liệu và thuật toán chương 7 cây (Trang 75 - 95)

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

 Trường hợp 2: X chỉ cĩ 1 con (trái hoặc phải)

 Trước khi hủy X ta mĩc nối cha của X với con duy nhất của nĩ

76 44 44 18 88 13 37 59 108 15 23 55 71 T/h 2: hủy X=37

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

 Trường hợp 3: X cĩ đủ 2 con:

 Khơng thể hủy trực tiếp do X cĩ đủ 2 con

 Hủy gián tiếp:

 Thay vì hủy X, ta sẽ tìm một phần tử thế mạng Y. Phần

tử này cĩ tối đa một con

 Thơng tin lưu tại Y sẽ được chuyển lên lưu tại X

 Sau đĩ, nút bị hủy thật sự sẽ là Y giống như 2 trường

hợp đầu

 Vấn đề: chọn Y sao cho khi lưu Y vào vị trí của X, cây vẫn

là CNPTK

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

 Trường hợp 3: X cĩ đủ 2 con:

 Cĩ 2 phần tử thỏa mãn yêu cầu:

 Phần tử trái nhất trên cây con phải  Phần tử phải nhất trên cây con trái

 Việc chọn lựa phần tử nào là phần tử thế mạng hồn tồn phụ thuộc vào ý thích của người lập trình

 Ở đây, ta sẽ chọn phần tử phải nhất trên cây con trái làm phân tử thế mạng

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

 Trường hợp 3: X cĩ đủ 2 con:

 Khi hủy phần tử X=18 ra khỏi cây, phần tử 23 là phần tử thế mạng: 79 44 18 88 13 37 59 108 15 23 40 55 71 T/h 3: hủy X=18 23

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

 Trường hợp 3: X cĩ đủ 2 con:

 Hàm delNode trả về giá trị 1, 0 khi hủy thành cơng hoặc khơng cĩ X trong cây:

int delNode(Tree &T, DataType X)

 Hàm searchStandFor tìm phần tử thế mạng cho nút p void searchStandFor(Tree &p, Tree &q)

81

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

int delNode(Tree&T, DataType X) {

if (T == NULL) return 0;

if (T->data > X) return delNode(T->pLeft, X); if (T->data < X) return delNode(T->pRight, X); TNode* p = T;

if (T->pLeft == NULL) T = T->pRight; else

if (T->pRight == NULL) T = T->pLeft; else// T cĩ đủ 2 con

searchStandFor(p, T->pRight); deletep;

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

 Tìm phần tử thế mạng

82

void searchStandFor(Tree &p, Tree &q) { if (q->pLeft) searchStandFor(p, q->pLeft); else { p->data = q->data; p = q; q = q->pRight; } }

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

83

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

84

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

85

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

86

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

87

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

88

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

90

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

91

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

Binary Search Tree – Hủy một phần tử cĩ khĩa X khĩa X

94

Một phần của tài liệu Bài giảng cấu trúc dữ liệu và thuật toán chương 7 cây (Trang 75 - 95)

Tải bản đầy đủ (PDF)

(131 trang)