NGUYỄN DUY PHƯƠNG 154//ta lấy node trái nhất của cây con phả

Một phần của tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật (2016): Phần 2 (Trang 30 - 31)

//ta lấy node trái nhất của cây con phải

node* temp = minValueNode(root->right);

root->data = temp->data; //thay thế nội dung node cần loại bỏ

root->right = deleteNode(root->right, temp->data);//loại bỏ node thay thế

}

return root; }

void BST::Function(void) {

node *tmp; int value, choice; do {

cout<<"\n CÂY NHỊ PHÂN TÌM KIẾM"; cout<<"\n 1. Thêm node vào cây BST"; cout<<"\n 2. Loại node trên cây BST "; cout<<"\n 3. Tìm node trên cây BST "; cout<<"\n 4. Duyệt theo thứ tự trước"; cout<<"\n 5. Duyệt theo thứ tự giữa "; cout<<"\n 6. Duyệt theo thứ tự sau "; cout<<"\n 0. Thoát ";

cout<<"\n Đưa vào lựa chọn:";cin>>choice; switch(choice) {

case 1:

cout<<"\n Giá trị node cần thêm:"; cin>> value; root = insert(root, value);break;

case 2:

cout<<"\n Giá trị node cần loại:"; cin>> value; root = deleteNode(root, value);break;

case 3:

cout<<"\n Giá trị node cần tìm:"; cin>> value; tmp = search(root, value);

if (tmp==NULL) cout<<"\n Node không có trên cây"; else cout<<"\n Node "<< tmp->value<<”có trên cây”; break;

case 4: preorder(root); break; case 5: inorder(root); break; case 6: postorder(root); break; default:

NGUYỄN DUY PHƯƠNG 155 } }

cout<<"\n Duyệt trước:"; preorder(root); cout<<"\n Duyệt sau:"; inorder(root); cout<<"\n Duyệt giữa:"; postorder(root);

}while(choice!=0); }

int main(){

BST X; X.Function(); }

5.6. Cây nhị phân tìm kiếm cân bằng

Tìm kiếm trên cây BST không cải thiện được nhiều so với cây nhị phân thông thường. Độ phức tạp thuật toán tìm kiếm node trên cây BTS trong trường hợp tốt nhất là log(N), trong trường hợp xấu nhất là O(N), với N là số node trên cây. Trường hợp xấu nhất xảy ra khi cây nhị phân tìm kiếm là cây lệch trái hoặc cây lệnh phải. Trường hợp tốt nhất xảy ra khi cây nhị phân tìm kiếm có độ cao là Log2(N). Giảm chiều sâu (độ cao) của các cây nhị phân tìm kiếm để cải thiện thời gian tìm kiếm node trên cây là mục tiêu chính của cây nhị phân tìm kiếm cân bằng.

5.6.1. Định nghĩa cây nhị phân tìm kiếm cân bằng

Cây tìm nhị phân tìm kiếm cân bằng có tính chất độ cao của cây con bên trái và độ cao cây con bên phải luôn lệch nhau không quá 1. Hình 4.18 là một cây nhị phân tìm kiếm tự cân bằng (AVL).

Hình 4.18. Ví dụ về cây AVL

Gọi lh(p) , rh(p) là chiều sâu của cây con phải và chiều sâu của cây con trái. Khi đó, bf(p) = lh(p) – rh(p) được gọi là chỉ số cân bằng của node p.Dựa vào chỉ số cân bằng của node, ta có thể xác định một cây con gốc p mất cân bằng các trường hợp sau:

Một phần của tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật (2016): Phần 2 (Trang 30 - 31)

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

(101 trang)