Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.1 MB, 123 trang )
Binary Search Tree – Hủy một phần tử có
khóa X
82
Xóa 36
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
83
Xóa nút gốc:
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
84
Xóa nút gốc:
42 là thế mạng
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
85
Kết quả xóa:
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
86
Xóa gốc 42
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
87
Xóa gốc 42
45 thế mạng
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
88
Kết quả xóa:
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
89
Các hàm dùng để hủy 1 phần tử:
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 q
và gán dữ liệu của q cho nút muốn xóa p
void searchStandFor(Tree &p, Tree &q)
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
90
Hủy một nút
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);
delete p;
}
Chương 7: Cây (Tree)
Binary Search Tree – Hủy một phần tử có
khóa X
91
Tìm phần tử thế mạng (nhỏ nhất trên cây con phải):
void searchStandFor(Tree &p, Tree &q)
{
if (q->pLeft != NULL)
searchStandFor (p, q->pLeft);
else
{
p->data = q->data;
p = q;
q = q->pRight;
}
}
Chương 7: Cây (Tree)
Binary Search Tree – Hủy toàn bộ cây
92
Việc toàn bộ cây có thể được thực hiện thông qua thao
tác duyệt cây theo thứ tự sau. Nghĩa là ta sẽ hủy cây
con trái, cây con phải rồi mới hủy nút gốc
void removeTree(Tree &T)
{
if (T)
{
removeTree(T->pLeft);
removeTree(T->pRight);
delete(T);
}
}
Chương 7: Cây (Tree)