Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc cây - Đậu Ngọc Hà Dương có nội dung trình bày về khái niệm, phép duyệt cây và biểu diễn cây, cây nhị phân và cây nhị phân tìm kiếm, cây AVL, cây AA,... Mời các bạn cùng tham khảo!
Trang 1C u trúc d li u và gi i thu t ấ ữ ệ ả ậ
Cấu trúc cây
Trang 2Nội dung trình bày
2
Trang 3Khái niệm
3
Trang 5Cây tổng quát
5
Trang 6Cây tổng quát
6
Trang 8r k Tk
Nút gốc
Cây con
Trang 10r k Tk
k 2
k 5
k 4 k
3
Trang 11Các khái niệm
11
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 con ậ ủ ậ ớ ấ ố
Trang 12r k Tk
Nút gốc
Cây con
Nút lá
Độ cao = 4Bậc = k
rk
k 1
k 2
k 5
k 4
k 3
Bậc = 2
Trang 13Phép duyệt cây
13
Trang 14 Duy t tr ệ ướ c (Preorder)
Duy t gi a (Inorder) ệ ữ
Trang 15Parent(b) = a
Parent(a)?
Child(c) = g
Trang 16k
Trang 19Biểu diễn cây
19
Trang 20Bằng danh sách cây con
20
a
h f
469
11
57
103
8
Trang 21Bằng danh sách cây con
Trang 22k
Trang 24k
Trang 25 Binary tree
Cây nhị phân
25
Trang 26Cây nhị phân
Là cây mà mỗi đỉnh
có bậc tối đa bằng 2.
Các cây con được
gọi là cây con trái và cây con phải.
Trang 2730
Trang 28Cây nhị phân tìm kiếm
2. Khóa của gốc nhỏ hơn khóa các đỉnh thuộc
cây con phải.
3. Cây con trái và cây con phải của gốc cũng là
cây nhị phân tìm kiếm.
Trang 29Cây nhị phân tìm kiếm
Trang 30Cây nhị phân tìm kiếm
Trang 31Thao tác trên
cây nhị phân tìm kiếm
Trang 33Thêm phần tử
33
Bước 1: Bắt đầu từ gốc
Bước 2: So sánh dữ liệu (khóa) cần thêm với
dữ liệu (khóa) của node hiện hành.
N u b ng nhau => Đã t n t i. K t thúc ế ằ ồ ạ ế
N u nh h n => Đi qua nhánh trái, Ti p b ế ỏ ơ ế ướ c 2.
N u l n h n => Đi qua nhánh ph i, Ti p b ế ớ ơ ả ế ướ c 2.
Trang 34 N u b ng nhau => Tìm th y. K t thúc ế ằ ấ ế
N u nh h n => Đi qua nhánh trái, Ti p b ế ỏ ơ ế ướ c 2.
N u l n h n => Đi qua nhánh ph i, Ti p b ế ớ ơ ả ế ướ c 2.
Bước 3: Không thể đi tiếp nữa => Không tìm
Trang 3614 13
9
18
Trang 37Phép duyệt cây
37
Duyệt trước
4 2
20
23
42
202523
Trang 38Phép duyệt cây
38
Duyệt giữa
4 2
Trang 39Phép duyệt cây
39
Duyệt sau
4 2
Trang 40Phép quay trái
40
a
b T1
Quay trái cây P
Trang 41Quay trái cây P
41
Trang 42T 1
P
b
T 3 Quay phải cây P
Trang 43Phép quay phải
50
55 40
36
40
50 37
Trang 44Thời gian thực hiện các phép toán
44
Đối với phép tìm kiếm:
Tr ườ ng h p t t nh t: m i nút (tr nút lá) đ u có 2 ợ ố ấ ỗ ừ ề con: O(log2n) (chính là chi u cao c a cây) ề ủ
Tr ườ ng h p x u nh t: cây tr thành danh sách liên ợ ấ ấ ở
k t: ế O(n)
Tr ườ ng h p trung bình là bao nhiêu? ợ
O(log2n)
Trang 45Ví dụ
45
Tạo cây nhị phân tìm kiếm theo thứ tự nhập như sau: 1, 8, 9, 12, 14, 15, 16, 18, 19
Trang 47 AVL tree
Cây AVL
47
Trang 48Giới thiệu
48
Do G.M A delsen V elskii và E.M L endis đưa ra vào năm 1962, đặt tên là cây AVL.
Trang 5018 17
Trang 51Xây dựng cây cân bằng
51
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 1 giá trị cho biết sự cân bằng của các cây con như thế nào.
Trang 57Xử lý mất cân bằng
57
Giả sử tại một node cây xảy ra mất cân bằng bên phải (cây con phải chênh lệch với cây con trái hơn một đơn vị):
M t cân b ng ph iph i (RR) ấ ằ ả ả
Quay trái
M t cân b ng ph itrái (RL) ấ ằ ả
Trang 58T3
h
h+1 h
h+1
h P Quay trái cây P
Trang 59Xử lý mất cân bằng
59
P mất cân bằng phải-phải (RR):
Trang 60Q
Quay trái cây P
Trang 62T4
h
h-1 h
1
T3
T 2
h
h h- 1
P
Q
b
T 4
h Quay phải cây Q
Trang 63a
c T1
Trang 64Xử lý mất cân bằng
64
P mất cân bằng phải-trái (RL) – Bước 1:
Quay phải cây Q
Trang 65P
Q
Trang 66Xử lý mất cân bằng
66
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áitrái (LL) ấ ằ
Quay phải
M t cân b ng tráitrái (LR) ấ ằ
Quay trái
Trang 67Xử lý mất cân bằng
67
Trang 6820
Trang 72Node 50 bị lệch phải !!!
65
Trang 74 AA tree
Cây AA
74
Trang 76Các khái niệm
76
Mức của node
Liên kết ngang
Trang 79Liê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 ọ ứ ớ ơ ả
Trang 86Các phép biến đổi cây
86
Split
Trang 87Các phép biến đổi cây
Trang 88Các phép biến đổi cây
Trang 89Các phép biến đổi cây
89
Skew: dùng để loại bỏ liên kết ngang bên trái.
Split: dùng để loại bỏ 2 liên kết ngang (phải) liên tiếp.
Biến đổi theo thứ tự Skew -> Split (nếu có).
Trang 90Các thao tác trên cây
90
Duyệt cây, Tìm kiếm:
T ươ ng t cây nh phân tìm ki m ự ị ế
Thêm phần tử
Xóa phần tử
Trang 91Thêm phần tử
91
Thực hiện tương tự trên cây nhị phân tìm kiếm.
Phần tử được thêm vào luôn ở mức 1.
Sau khi thêm, thực hiện các thao tác Skew
và/hoặc Split để đảm bảo tính chất của cây.
Trang 92Ví dụ
92
V cây AA theo th t nh p sau đây: ẽ ứ ự ậ
4, 7, 6, 3, 5, 9, 15, 27, 8, 40
Trang 94Ví dụ
94
Hãy vẽ cây AA theo thứ tự nhập sau đây:
40, 8, 27, 15, 9, 5, 3, 6, 7, 4
Trang 106Bài tập
106
Trang 107Bài tập
107
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.
2 Hãy chứng tỏ rằng trường hợp tìm kiếm trung
bình cho cây nhị phân tìm kiếm là O(log2n)?
Trang 108 Cho bi t k t qu sau khi duy t cây theo các trình t ế ế ả ệ ự
gi a, tr ữ ướ c và sau.
Trang 109- Tính độ cao của 1 node trong cây.
- Xuất ra các node có cùng độ cao.
Trang 111Bài tập
111
6 Hãy vẽ cây AVL với 12 nút có chiều cao cực đại trong tất cả các cây AVL 12 nút.
7 Tìm 1 dãy N khoá sao cho khi lần lượt dùng
thuật toán thêm vào cây AVL sẽ phải thực hiện
mỗi thao tác cân bằng (LL, LR, RL, RR) lại ít nhất
1 lần
Trang 112Hỏi và Đáp
112
Trang 113Đọc thêm ví dụ thêm phần tử
113
Trang 114Ví dụ
114
V cây AA theo th t nh p sau đây: ẽ ứ ự ậ
4, 7, 6, 3, 5, 9, 15, 27, 8, 40
Trang 115Ví dụ
115
4
Trang 118Ví dụ
118
4
76
Thêm 6
Trang 120Ví dụ
120
Hai liên k t ngang liên ti pế ế
Trang 121Ví dụ
121
6
74
Trang 122Ví dụ
122
6
74
3
6
74
3
Thêm 3
Trang 123Ví dụ
123
6
74
3
Trang 124Ví dụ
124
6
74
3
5
Thêm 5
Trang 125Ví dụ
125
6
74
Trang 127Ví dụ
127
6
73
4
5
Trang 128Ví dụ
128
6
73
4
5
Trang 129Ví dụ
129
6
73
4
5
9
Trang 130Ví dụ
130
6
73
4
5
9
Trang 131Ví dụ
131
6
73
4
Trang 132Ví dụ
132
6
93
4
5
Trang 136Thêm 8
Trang 14040