Professional Documents
Culture Documents
CTDL 05 Tree
CTDL 05 Tree
CTDL 05 Tree
Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến
2
Khái niệm
Cây AVL
Tree
Search tree
Binary search tree
Balanced tree
AVL tree
AA tree
Red-Black tree
…
b c
d e f g h
i j k l m n
o p q
Nút gốc
r1 r2 rk
T1 T2 Tk
Cây con
node: đỉnh
parent (của node n): node cha của node n.
Node phía trên trực tiếp của node n trong cây.
child (của node n): node con của node n. Node
phía dưới trực tiếp của node n trong cây.
root: gốc cây. Node duy nhất không có node cha
leaf: node lá. Node không có node con.
path: đường đi
Nút gốc
r1 r2 rk
k1 k2
T1 T2 Tk
k3 k4 k5
Cây con
Nút lá
Đường đi k6
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
12
degree/order: bậc
Bậc của node: Số con của node
Bậc của cây: bậc lớn nhất trong số các node của cây.
depth/level: độ sâu/mức
Mức (độ sâu) của node:
◼ Nếu node n là node gốc:
◼ level(n) = 1
◼ Nếu node n không phải là node gốc:
◼ level(n) = 1 + level(parent(n)).
r1 r2 rk
k1 k2
T1 T2 Tk
k3 k4 k5
Cây con
Nút lá
Đường đi k6
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
15
Đảm bảo đến mỗi node trên cây chính xác một lần
một cách có hệ thống.
PreOrder(root)
{
Nếu root rỗng thì không làm gì cả;
//Thao tác: in dữ liệu, cộng dồn,..
Xử lý tại root;
//Duyệt trước tại các cây con Childi.
PreOrder(Child0);
PreOrder(Child1);
…
PreOrder(Childk-1);
} Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
18
PostOrder(root)
{
Nếu root rỗng thì không làm gì cả;
//Duyệt sau tại các cây con Childi.
PostOrder(Child0);
PostOrder(Child1);
…
PostOrder(Childk-1);
Xử lý tại root; //Xử lý root SAU cùng.
}
InOrder(root)
{
Nếu root rỗng thì không làm gì cả;
//Duyệt trên con đầu tiên
InOrder(Child0);
Xử lý tại root; //Kẹp. Không đầu, không cuối
//Duyệt trên các con còn lại
InOrder(Child1);
InOrder(Child2);
…
InOrder(Childk-1);
}
b c
d e f g h
i j k
Duyệt trước
• abdeijcfgkh
Duyệt giữa b c
• dbiejafckgh
d e f g h
Duyệt sau
• dijebfkghca i j k
b c
d e f g h
A Root
B C
D E F G H
I J K
1 a 2 0
2 b 4 3
3 c 6 0
4 d 0 5 b c
5 e 9 0
6 f 0 7
7 g 11 8 d e f g h
8 h 0 0
9 i 0 10
10 j 0 0 i j k
11 k 0 0
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
27
A Root
B C
D E F G H
I J K
Info Parent
1 a 0
2 b 1
3 c 1
4 d 2
b c
5 e 2
6 f 3
7 g 3 d e f g h
8 h 3
9 i 5
10 j 5 i j k
11 k 7
Binary tree
b c b c
d e f g d e f g
h i j
Cây nhị phân hoàn chỉnh Cây nhị phân hoàn hảo
Chiều cao tối thiểu của một cây nhị phân gồm
N node?
3 4 30
Cây nhị phân tìm kiếm là cây nhị phân thỏa mãn
các điều kiện sau:
1. Khóa của node gốc lớn hơn tất cả khóa của
các node thuộc cây con trái.
2. Khóa của node gốc nhỏ hơn tất cả khóa của
các node thuộc cây con phải.
3. Cây con trái và cây con phải của node gốc là
cây nhị phân tìm kiếm.
4 10
2 6 9 23
5 7 20
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
40
Đặc điểm:
Có thứ tự
Không có phần tử trùng
Sắp xếp
Duyệt cây
Quay cây
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
43
1 8 9 13 14 15 16 18 19
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
47
Duyệt trước
2 20
1 3 25
23
Duyệt giữa
2 20
1 3 25
23
Duyệt sau
2 20
1 3 25
23
P
18 35
8 35 18 50
20 50 8 20 55
55
P P
50 40
40 55 37 50
37 45 65 36 45 55
65
36
O(log2n)
14
15
16
18
AVL tree
Ví dụ : 12
12
8 18 8 18
5 11 17 5 11 17
4 7 4 7
Việc xây dựng cây cân bằng dựa trên cây nhị
phân tìm kiếm, chỉ bổ sung thêm một giá trị (bal)
cho biết sự cân bằng của các cây con như thế
nào.
Trong đó giá trị bal (balance, cân bằng) có thể
là: 0: cân bằng; 1: lệch trái; 2: lệch phải
Nguồn: Wikipedia
12
18
5 17
12
18
5 17
12
5 11 22
7 25
4
12
5 11 22
4 7 20
h+1
h
h h+1 h h
18 35
Q
8 35 18 50
20 50 8 20 55
55
h h-1
Q Q
h h
h h
h h-1 h- 1 h
h h
h h- 1 h
h- 1 h
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
74
35 35
Q
50 18 40
18
8 20 40 55 8 20 37 50
37 45 65 36 45 55
36
65
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
75
35 40
Q
18 40 35 50
8 20 37 50 45 55
18 37
36 45 55 36 65
8 20
65
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
76
Khi một node cây xảy ra mất cân bằng bên trái
(cây con trái chênh lệch với cây con phải hơn
một đơn vị): (thực hiện đối xứng với trường hợp
mất cân bằng bên phải)
Mất cân bằng trái-trái (LL)
◼ Quay phải
Theo Wikipedia
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
78
4 10
2 6 9 23
5 7 20
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
79
Sau khi xóa, nếu cây mất cân bằng, thực hiện
cân bằng cây.
Ví dụ: xóa 35
Phần tử thế mạng là 36
40 40
35 50 36 50
18 37 45 55 18 37 45 55
8 20 36 65 8 20 65
Xóa phần tử 45
40 40
36 50 36 50
18 37 45 55 18 37 55
8 20 65 8 20 65
40 40
50 36 55
36
55 18 37 50 65
18 37
8 20 65 8 20
AA tree
Mức 2 15
Mức 1
5 10 20
15
5 10 20
Cây AA là cây nhị phân tìm kiếm thỏa mãn các tính chất
sau:
[1] Mức của node con trái bắt buộc phải nhỏ hơn mức của node
cha.
[2] Mức của node con bên phải nhỏ hơn hoặc bằng mức của node
cha.
Liên kết ngang bắt buộc hướng sang phải.
[3] Mức của node cháu bên phải bắt buộc nhỏ hơn mức của node
ông.
Không tồn tại 2 liên kết ngang liên tiếp.
[4] Mọi node có mức lớn hơn 1 phải có 2 node con.
[5] Nếu một node không có liên kết ngang phải thì cả hai node con
của nó phải cùng mức.
30 70
15 50 60 85
35 40 55 65 80 90
5 10 20
30 70
15 50 60 85
35 40 55 65 80 90
5 10 20
So sánh mức của node con trái với mức của node cha trực tiếp của nó?
Các cặp node: 15 và 30, 5 và 15, 50 và 70, 35 và 50, 55 và 60, 80 và 85
30 70
15 50 60 85
35 40 55 65 80 90
5 10 20
30 70
15 50 60 85
35 40 55 65 80 90
5 10 20
30 70
15 50 60 85
35 40 55 65 80 90
5 10 20
30 70
15 50 60 85
35 40 55 65 80 90
5 10 20
So sánh mức của các node con của các node: 15, 70, 60, 85?
Skew
Split
Skew:
Dùng để loại bỏ liên kết ngang trái.
P X P X
A B C A B C
Split:
Dùng để loại bỏ 2 liên kết ngang liên tiếp
P
X P G
X G
A B C D
A B C D
Thêm phần tử
Xóa phần tử
4 9 27
3 5 7 8 15 40
27
5 7
3 4 6 8 15 40
Xóa phần tử 8
6
4 9 27
3 5 7 8 15 40
Xóa phần tử 8
6
4 9 27
3 5 7 15 40
Xóa phần tử 5
4 9 27
3 5 7 8 15 40
Xóa phần tử 5
4 9 27
Xóa phần tử 5
3 4 9 27
Skew tại 4
7 8 15 40
Xóa phần tử 5
Giảm mức
3 4 9 27
7 8 15 40
Xóa phần tử 5
6 9 27
3 4 7 8 15 40
Xóa phần tử 5
Split tại 6
6 9 27
3 4 7 8 15 40
Xóa phần tử 5
9
6 27
3 4 7 8 15 40
1. Xây dựng giải thuật xóa một đỉnh với khóa cho
trước ra khỏi cây nhị phân tìm kiếm.
3. Biểu diễn tình trạng cây nhị phân tìm kiếm sau
khi thực hiện các thao tác sau:
Lần lượt thêm các node theo trình tự: M G B K S P D
C A H L F X N T W R.
Xóa M.
Xóa S.
Cho biết kết quả sau khi duyệt cây theo các trình tự
giữa, trước và sau.
4. Xây dựng giải thuật thực hiện các thao tác sau
trên cây nhị phân tìm kiếm:
- Đếm số node lá.
- Tính độ cao cây.
- Tính độ cao của 1 node trong cây.
- Xuất ra các node có cùng độ cao.
Xóa 19
Thêm 4
Chuẩn bị: Thêm 7
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
126
Thêm 7
Chuẩn bị: Thêm 6
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
127
Thêm 6
Quan sát các liên kết mới thêm
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
128
6 7
Thêm 6
Quay phải nút 7
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
129
4 6 7
4 7
4 7
3
6
3 4 7
Thêm 3
3 4 7
3 4 7
Thêm 5
3 4 5 7
4 7
3 5
4 6
3 5 7
4 6
3 5 7
4 6
3 5 7
Thêm 9
Chuẩn bị: Thêm 15
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
140
4 6
3 5 7
15
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
141
4 6
3 5 7 9 15
4 6
3 5 9
7 15
4 6 9
3 5 15
7
4 9
3 5 7 15
4 9
3 5 7 15
27
Thêm 27
Chuẩn bị: Thêm 8
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
146
4 9
3 5 7 15
8 27
Thêm 8
4 9
3 5 7 8 15 27
4 9
3 5 7 8 15 27
40
Thêm 40
4 9
3 5 7 8 15 27 40
4 9
3 5 7 8 27
15 40
4 9 27
3 5 7 8 15 40