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