Tải bản đầy đủ (.pdf) (14 trang)

Cây nhị phân tìm kiếm cân bằng (AVL Tree)

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 (405.58 KB, 14 trang )

39
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 77
Cây nhị phân tìm kiếm cân bằng
(AVL Tree)
! Vì sao phải cân bằng ?
! Định nghĩa
! Ví dụ
! Mô tả cấu trúc dữ liệu
! Thao tác điều chỉnh cây
! Ví dụ tạo cây
! Các đánh giá
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 78
AVL Tree
Vìsao phải cân bằng ?
! Cây BST có thể không cân bằng
Tom
Nancy
Alan
Bob
Ellen
Jane
Wendy
Cây bị lệch
à Chi phí O(N)
Trường hợp nào cây
BST trở nên bị lệch ?
Cần có 1 phương
pháp để duy trì độ cân
bằng cho cây !
40
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 79


AVL Tree
Vìsao phải cân bằng ?
! Cây AVL là 1 dạng cây BST cân bằng
! Cấu trúc cây AVL do 3 tác giả: Adelson,
Velskii, Landis đề xuất năm 1962
! Đây là mô hình cây cân bằng động đầu tiên
được đề xuất
! Cây AVL không có độ cân bằng “tuyệt
đối”, nhưng 2 cây con không bao giờ có độ
cao chênh lệch quá 1.
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 80
AVL Tree
Định nghĩa
! Cây AVL là:
! Một cây nhị phân tìm kiếm
! Mỗi nút p của cây đều thỏa: độ cao của cây
con bên trái (p->pLeft) và độ cao của cây con
bên phải (p->pRight) chênh lệch nhau không
quá 1
∀p∈T
AVL
:abs(h
p->pLeft
-h
p->pRight
)≤ 1
41
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 81
AVL Tree
Vídụ

Cây AVL ?
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 82
AVL Tree
Môtảcấu trúc dữ liệu
! Thêm vào mỗi nút trong cây 1 field Bal,
diễn tả trạng thái của nút đó:
! Bal = -1: nút lệch trái (cây con trái cao hơn
cây con phải)
! Bal = 0: nút cân bằng (cây con trái cao bằng
cây con phải)
! Bal = +1: nút lệch phải (cây con phải cao hơn
cây con trái)
42
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 83
AVL Tree
Môtảcấu trúc dữ liệu
10
20
30
15
40
26
27
25
1
0
-1
0
1
0

0
0
Hệ số cân
bằng của
các nút
trong cây
AVL
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 84
AVL Tree
Môtảcấu trúc dữ liệu
Nút gốc của
cây con trái
pRoot
Count
Nút gốc của
cây con phải
AVLT_NODE
AVL_TREE
Data Bal
pLeft pRight
Data Bal
pLeft pRight
Data Bal
pLeft pRight
43
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 85
AVL Tree
Môtảcấu trúc dữ liệu
// Định nghĩa các cấu trúc dữ liệu
typedef struct tagAVLT_NODE {

intData;
intBal; // Hệ số cân bằng (-1,0,1)
tagBT_NODE*pLeft; // con trỏ đến nút con trái
tagBT_NODE*pRight; // con trỏ đến nút con phải
} AVLT_NODE;// Cấu trúc nút của cây AVL
Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 86
AVL Tree
Môtảcấu trúc dữ liệu
// Định nghĩa các cấu trúc dữ liệu … (tiếp theo)
typedef struct AVL_TREE {
intCount; // Số nút trong cây
AVLT_NODE*pRoot; // con trỏ đến nút gốc
};// Cấu trúc cây AVL

×