NULL NULL NULL

Một phần của tài liệu Cây (tree) (Trang 54 - 56)

NULL NULL

Thực hiện quay đơn cây con trái của BALTree->BAL_Right cây nhị phân tìm kiếm sau khi quay trở thành cây nhị phân tìm kiếm như sau:

BALTree 25 -2

19 0 30 -1

NULL NULL 27 0 40 -1

NULL NULL NULL 44 0

NULL NULL

Thực hiện quay đơn cây con phải của BALTree cây nhị phân tìm kiếm sau khi quay trở thành cây nhị phân tìm kiếm cân bằng như sau:

Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật BALTree

30 0

25 0 40 -1

19 0 27 0 NULL 44 0

NULL NULL NULL NULL NULL NULL Trường hợp 2: Nếu AncestorNode->Bal = 2:

Cũng tương tự như trường hợp 1 song ở đây chúng ta sẽ thực hiện quay đơn hoặc quay kép các nhánh phía ngược lại

Gọi: AncL = AncestorNode->BAL_Left AncR = AncestorNode->BAL_Right

⇒ AncL có chiều cao là h+2 và AncR có chiều cao là h (h ≥ 0) ⇒ Có ít nhất 1 cây con của AncL có chiều cao là h+1

Gọi: AncLL = AncL->BAL_Left AncLR = AncL->BAL_Right

⇒ Cây con có nút gốc AncestorNode có thể ở vào một trong ba dạng sau:

a2) AncLL có chiều cao là h+1 và AncLR có chiều cao là h (AncL->Bal = 1)

AncestorNode

AncL 2 AncR

AncLL 1 AncLR

h

h+1 h

Để cân bằng lại AncestorNode chúng ta thực hiện việc quay đơn cây con trái AncL của nút này lên thành nút gốc; chuyển AncestorNode thành nút con phải của nút gốc và AncestorNode có hai cây con là AncLR và AncR (BAL_Left Rotation).

Ví dụ: Việc thêm nút có Key = 10 vào cây nhị phân tìm kiếm cân bằng sau đây sẽ làm cho cây mất cân bằng và chúng ta phải cân bằng lại theo trường hợp này:

Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật BALTree

50 1

35 0 70 0

Một phần của tài liệu Cây (tree) (Trang 54 - 56)