Cấu trúc dữ liệu và thuật giải
NỘI DUNG
CÂY NHỊ PHÂN TÌM KIẾM CÂN BẰNG
Cấu trúc dữ liệu và thuật giải
Ðịnh nghĩa
Cây nhị phân tìm kiếm cân bằng là cây mà tại mỗi nút
của nó độ cao của cây con trái và của cây con phải chênh
lệch không quá một
Ví dụ:
44
23
88
13 37
59
108
15 30 40 55 71
Cấu trúc dữ liệu và thuật giải
Tổ chức dữ liệu
•
Chỉ số cân bằng = độ lệch giữa cây trái và cây phải của
một nút
•
Các giá trị hợp lệ :
–
CSCB(p) = 0 ⇔ Độ cao cây trái (p) = Độ cao cây
phải (p)
–
CSCB(p) = 1 ⇔ Độ cao cây trái (p) < Độ cao cây
phải (p)
–
CSCB(p) = -1 ⇔ Độ cao cây trái (p) > Độ cao
cây phải (p)
Cấu trúc dữ liệu và thuật giải
Tổ chức dữ liệu(tt)
typedef struct tagAVLNode {
char balFactor; //ch s cân b ngỉ ố ằ
Data key;
struct tagAVLNode* pLeft;
struct tagAVLNode* pRight;
}AVLNode;
typedef AVLNode *AVLTree;
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do
lệch trái
T
T1
L1
R1
h
h-1
h-1
L
R1
T
T1
L1
h
h-1
L
R R
h-1
T
T1
L1
h
h-1
h
L
R
L1
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do
lệch phải
T
h-1
R1
T1
h
h
R
L
L1
T
T1
L1
R1
h
h-1
R
T
R1
T1
L1
h
h-1
R
L
h-1
L
h-1
Cấu trúc dữ liệu và thuật giải
Các thao tác trên cây cân bằng
Khi thêm hay xoá 1 nút trên cây, cĩ thể làm cho cây mất
tính cân bằng, khi ấy ta phải tiến hành cân bằng lại.
•
Cây có kh n ng m t cân b ng khi thay i chi u cao:ả ă ấ ằ đổ ề
–
Lệch nhánh trái, thêm bên trái
–
Lệch nhánh phải, thêm bên phải
–
Lệch nhánh trái, hủy bên phải
–
Lệch nhánh phải, hủy bên trái
•
Cân b ng l i cây : tìm cách b trí l i cây sao cho chi u ằ ạ ố ạ ề
cao 2 cây con cân i:đố
–
Kéo nhánh cao bù cho nhánh thấp
–
Phải bảo đảm cây vẫn là Nhị phân tìm kiếm
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch trái
1 .1 Cây T l ch trái, cây trái T1 c a T c ng l ch tráiệ ủ ũ ệ
T
T1
L1
R1
h
h-1
h-1
L
R
T1
T
L1
R1
h
h-1
R
h-1
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch trái
1 . 2 Cây T l ch trái, cây trái T1 c a T không l chệ ủ ệ
T
T1
L1
h-1
h
L
R
T1
T
L1
h
R
h-1
R1 R1
h
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch trái
1 . 3 Cây T l ch trái, cây trái T1 c a T l ch ph iệ ủ ệ ả
h
T
T1
L1
h-1
R1
R
h-1
T2
L2 R2
TT1
L1
h-1
R
h-1
T2
L2 R2
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch phải
1 .1 Cây T l ch ph i, cây ph i T1 c a T c ng l ch ph iệ ả ả ủ ũ ệ ả
T
T1
L1R1
h
h-1
h-1
L
R
T1
T
L1
R1
h
h-1
R
h-1
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch phải
1 . 2 Cây T l ch ph i, cây ph i T1 c a T không l chệ ả ả ủ ệ
T
T1
L1
h
h-1
h
L
R
R1
T1
T
L1
h
R
h-1
R1
h
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do
lệch phải
1 . 3 Cây T l ch ph i, cây ph i T1 c a T l ch trái ệ ả ả ủ ệ
h
T
T1
L1
h-1
R1
R
h-1
T2
L2R2
T T1
L1
h-1
R
h-1
T2
L2R2
Cấu trúc dữ liệu và thuật giải
Thêm 1 nút
•
Thêm bình thường như trường hợp cây NPTK
•
Nếu cây tăng trưởng chiều cao:
–
Lần ngược về gốc để phát hiện nút bị mất cân bằng
–
Tiến hành cân bằng lại nút đó bằng thao tác cân bằng
thích hợp
•
Việc cân bằng lại chỉ cần thực hiện 1 lần tại nơi mất cân
bằng
Cấu trúc dữ liệu và thuật giải
Hủy 1 nút
•
H y bình th ng nh tr ng h p cây NPTKủ ườ ư ườ ợ
•
N u cây gi m chi u cao:ế ả ề
–
Lần ngược về gốc để phát hiện nút bị mất cân bằng
–
Tiến hành cân bằng lại nút đó bằng thao tác cân
bằng thích hợp
–
Tiếp tục lần ngược lên nút cha…
•
Vi c cân b ng l i co th lan truy n lên t n g cệ ằ ạ ể ề ậ ố