CTDL 05 Tree

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 151

Giảng viên:

Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến
2

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ấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


3

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


4

 Tree
 Search tree
 Binary search tree
 Balanced tree
 AVL tree
 AA tree
 Red-Black tree
 …

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


5

b c

d e f g h

i j k l m n

o p q

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


6

Sơ đồ tổ chức Cây thư mục


Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
7

Cây (cây có gốc) được xác định (đệ quy) như


sau:
1. Tập hợp gồm 1 đỉnh là một cây. Cây này có gốc là
đỉnh duy nhất của nó.
2. Gọi T1, T2, … Tk (k ≥ 1) là các cây không cắt nhau có
gốc tương ứng r1, r2, … rk.
Giả sử r là một đỉnh mới không thuộc các cây Ti. Khi đó,
tập hợp T gồm đỉnh r và các cây Ti tạo thành một cây
mới với gốc r. Các cây T1, T2, … Tk được gọi là cây
con của gốc r.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


8

Nút gốc

r1 r2 rk

T1 T2 Tk

Cây con

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


9

 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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


10

 siblings: các node cùng node cha.


 ancestor (của node n): node trên đường đi từ
node gốc đến node n.
 descendant (của node n): node trên đường đi từ
node n đến node lá.
 subtree (của node n): cây con. Cây bao gồm 1
node con của node n và các node “hậu duệ” của
node này.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


11

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)).

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


13

 height: chiều cao. Số lượng node trên đường đi


dài nhất từ node gốc đến node lá.
 Chiều cao cây:
◼ Nếu cây T rỗng: height(T) = 0
◼ Nếu cây T khác rỗng: height (T) = max{level(Ni)}, NiT

 Chiều cao cây:


◼ Nếu cây T rỗng: height(T) = 0
◼ Nếu cây T khác rỗng: height(T) = 1 + max{height(Ti)},
Ti là cây con của T

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


14

Bậc = k Nút gốc


Bậc = 2
Độ cao = 4

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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


16

 Đả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.

 Nhiều thao tác xử lý trên cây cần phải sử dụng đến


phép duyệt cây.

 Các phép cơ bản:


 Duyệt trước (Pre-order)

 Duyệt giữa (In-order)

 Duyệt sau (Post-order)


Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
17

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.
}

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


19

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);
}

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


20

b c

d e f g h

i j k

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


21

Duyệt trước
• abdeijcfgkh

Duyệt giữa b c

• dbiejafckgh
d e f g h
Duyệt sau
• dijebfkghca i j k

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


22

b c

d e f g h

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


23

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


24

info child id next


1 a 2 3
2 b 4 5
3 c 6 7 8
4 d
5 e 9 10
6 f b c
7 g 11
8 h
d e f g h
9 i
10 j
11 k i j k
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
25

A Root

B C

D E F G H

I J K

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


26

Info Eldest Child Next Sibling

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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


28

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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


29

Binary tree

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


30

 Là cây mà mỗi đỉnh


có bậc tối đa bằng 2.
 Các cây con được b c
gọi là cây con trái và
cây con phải. d e f g

 Có toàn bộ các thao


tác cơ bản của cây. h i j

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


31

 Cây nhị phân hoàn chỉnh (complete binary tree)

 Cây nhị phân hoàn hảo (perfect binary tree)

 Cây nhị phân đầy đủ (full binary tree)


 proper binary tree, plane binary tree, strictly binary tree

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


32

 Cây nhị phân hoàn chỉnh


 Cây nhị phân có chiều cao là h thì có đầy đủ các node
từ mức 1 đến mức h-1. Các node ở mức h sẽ được lấp
từ trái sang phải.
 Cây nhị phân hoàn hảo
 Cây nhị phân hoàn hảo có chiều cao là h thì tất cả các
node nằm ở mức từ 1 đến h-1 đều có 2 node con.
 Cây nhị phân đầy đủ (full binary tree)
 Cây nhị phân mà mỗi node trong (không phải là node
lá) đều có đủ 2 con.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


33

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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


34

 Heap là một cây nhị phân hoàn chỉnh:


 Max-heap: Node cha có giá trị lớn hơn hoặc bằng
node con.

 Min-heap: Node cha có giá trị nhỏ hơn hoặc bằng


node con.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


35

 Chiều cao tối thiểu của một cây nhị phân gồm
N node?

 Chiều cao tối đa của một cây nhị phân gồm N


node?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


36

 Số node tối thiểu trên cây nhị phân có chiều


cao h?

 Số node tối đa trên cây nhị phân có chiều cao


h?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


37

 Cây tổ chức thi đấu


 Cây biểu thức số học
 Lưu trữ và tìm kiếm * +
thông tin.
4 - 1 sin

3 4 30

Cây biểu thức:


4 * (3 – 4) + (1 + sin(30))
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
38

 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.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


39

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

 Dễ dàng tạo dữ liệu sắp xếp, và tìm kiếm

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
42

 Thêm phần tử (khóa)

 Tìm kiếm phần tử (khóa)

 Xóa phần tử (khóa)

 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

 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.

 Bước 3: Không thể đi tiếp nữa => Tạo


node mới với dữ liệu (khóa) cần thêm.
Kết thúc
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
44

 Bước 1: Bắt đầu từ gốc

 Bước 2: So sánh dữ liệu (khóa) cần tìm


với dữ liệu (khóa) của node hiện hành.
 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 thấy. Kết thúc.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


45

 Tìm đến node chứa dữ liệu (khóa) cần xóa.

 Xét các trường hợp:


 Node lá
 Node chỉ có 1 con

 Node có 2 con: dùng phần tử thế thân để xóa thế.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


46

 Cho cây nhị phân tìm kiếm

 Thứ tự duyệt các node 8 19


nếu sử dụng Duyệt giữa?
1 9 16

 Nêu nhận xét


13 18
 Cóthể dễ dàng tạo dữ liệu sắp xếp
nếu dùng phép duyệt giữa
14

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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


48

 Duyệt giữa

2 20

1 3 25

23

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


49

 Duyệt sau

2 20

1 3 25

23

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


50

P Quay trái cây P P

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


51

Quay trái cây P

P
18 35

8 35 18 50

20 50 8 20 55

55

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


52

Quay phải cây P

P P

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


53

Quay phải cây P


P

50 40

40 55 37 50

37 45 65 36 45 55

65
36

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


54

 Đố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)

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


55

 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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


56

 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
1
8
9
12

14
15
16
18

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019 19


57

AVL tree

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


58

 Do Georgy Adelsen Velskii và Evgenii Lendis


đưa ra vào năm 1962, đặt tên là cây AVL.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


59

 Cây cân bằng AVL là cây nhị phân tìm kiếm mà


tại mỗi đỉnh của cây, độ cao của cây con trái và
cây con phải không chênh lệch quá 1.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


60

 Ví dụ : 12
12

8 18 8 18

5 11 17 5 11 17

4 7 4 7

Cây AVL? 2 Cây AVL?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


61

 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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


62

Nguồn: Wikipedia

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


63

 Mất cân bằng trái-trái (L-L)

 Mất cân bằn trái-phải (L-R)

 Mất cân bằng phải-phải (R-R)

 Mất cân bằng phải-trái (R-L)

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


64

 Mất cân bằng trái-trái (L-L)

12

18

5 17

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


65

 Mất cân bằng trái-phải (L-R)

12

18

5 17

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


66

 Mất cân bằng phải-phải (R-R)

12

5 11 22

7 25
4

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


67

 Mất cân bằng phải-trái (R-L)

12

5 11 22

4 7 20

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


68

 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ải-phải (RR)
◼ Quay trái

 Mất cân bằng phải-trái (R-L)


◼ Quay phải
◼ Quay trái

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


69

 P mất cân bằng phải-phải (RR):

P Quay trái cây P P

h+1
h

h h+1 h h

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


70

 P mất cân bằng phải-phải (RR):


Quay trái cây P
P

18 35
Q

8 35 18 50

20 50 8 20 55

55

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


71

 P mất cân bằng phải-trái (RL):


 Bước 1: quay phải Q
P
 Bước 2: quay trái cây P

h h-1

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


72

 P mất cân bằng phải-trái (RL):


 Bước 1: quay phải cây Q
P Quay phải cây Q P

Q Q

h h

h h

h h-1 h- 1 h

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


73

 P mất cân bằng phải-trái (RL):


 Bước 2: quay trái cây P
P Quay trái cây P P

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

 P mất cân bằng phải-trái (RL) – Bước 1:


P Quay phải cây Q

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

 P mất cân bằng phải-trái (RL) - Bước 2:


P Quay trái cây P

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

 Mất cân bằng trái-trái (L-R)


◼ Quay trái
◼ Quay phải

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


77

Theo Wikipedia
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
78

 Thực hiện hoàn toàn tương tự 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
79

 Thực hiện tương tự với việc thêm phần tử của


cây nhị phân tìm kiếm.

 Nếu xảy ra việc mất cân bằng thì xử lý bằng các


trường hợp mất cân bằng đã biết.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


80

 Thực hiện tương tự cây nhị phân tìm kiếm: xét 3


trường hợp, và tìm phần tử thế mạng nếu cần.

 Sau khi xóa, nếu cây mất cân bằng, thực hiện
cân bằng cây.

 Lưu ý: việc cân bằng sau khi hủy có thể xảy ra


dây chuyền.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


81

 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

Cây vẫn cân bằng nên


không phải hiệu chỉnh

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


82

 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

Node 50 bị lệch phải !!!

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


83

 Xóa phần tử 45: cân bằng lại cây


Quay trái tại node 50

40 40

50 36 55
36

55 18 37 50 65
18 37

8 20 65 8 20

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


84

AA tree

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


85

 Được đặt tên theo tác giả Arne Anderson (Thụy


Điển).

 Công trình được công bố năm 1993 (Balanced


Search Trees Made Simple).

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


86

 Mức của node

 Liên kết ngang

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


87

 Mức của node:


 Số liên kết trái từ node đó đến node NULL.
◼ Mức của NULL là 0.
◼ Mức của node lá là 1.

Mức 2 15

Mức 1
5 10 20

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


88

 Liên kết ngang:


 Liên kết giữa node cha và node con có cùng mức.

15

5 10 20

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


89

 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.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


90

30 70

15 50 60 85

35 40 55 65 80 90
5 10 20

Mức của các node?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


91

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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


92

30 70

15 50 60 85

35 40 55 65 80 90
5 10 20

Các liên kết ngang?


Hướng của liên kết ngang?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


93

30 70

15 50 60 85

35 40 55 65 80 90
5 10 20

Có tồn tại 2 liên kết ngang liên tiếp?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


94

30 70

15 50 60 85

35 40 55 65 80 90
5 10 20

Mọi node có mức lớn hơn 1 đều có 2 node con?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


95

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?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


96

 Skew

 Split

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


97

 Skew:
 Dùng để loại bỏ liên kết ngang trái.

P X P X

A B C A B C

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


98

 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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


99

 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ó).

 Khi thực hiện thao tác Split, node giữa được


tăng thêm một mức.
Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
100

 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ử

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


101

 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.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


102

 Vẽ cây AA theo thứ tự nhập sau đây:


4, 7, 6, 3, 5, 9, 15, 27, 8, 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


103

4 9 27

3 5 7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


104

 Hãy vẽ cây AA theo thứ tự nhập sau đây:


 40, 8, 27, 15, 9, 5, 3, 6, 7, 4

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


105

27
5 7

3 4 6 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


106

 Nếu mức của node lớn hơn 1, tìm phần tử thế


mạng:
 Phần tử lớn nhất bên nhánh trái (node có mức bằng 1).

 Xóa node có mức bằng 1:


 Giảm mức của node cha nếu mức của node đó nhỏ
hơn.
 Thực hiện các thao tác Skew, Split cần thiết

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


107

 Xóa phần tử 8
6

4 9 27

3 5 7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


108

 Xóa phần tử 8
6

4 9 27

3 5 7 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


109

 Xóa phần tử 5

4 9 27

3 5 7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


110

 Xóa phần tử 5

4 9 27

Giảm mức của 4


3 7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


111

 Xóa phần tử 5

3 4 9 27

Skew tại 4
7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


112

 Xóa phần tử 5
Giảm mức

3 4 9 27

7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


113

 Xóa phần tử 5

6 9 27

3 4 7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


114

 Xóa phần tử 5

Split tại 6

6 9 27

3 4 7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


115

 Xóa phần tử 5
9

6 27

3 4 7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


116

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


117

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)?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


118

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.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


119

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.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


120

5. Biểu diễn tình trạng cây cân bằng AVL/cây AA


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ự: 13 7 2 11 19 16 4
3 1 8 12 6 24 14 20 23 18
 Xóa 13.

 Xóa 19

Lưu ý: cho biết các trường hợp mất cân bằng.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


121

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.

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


122

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


123

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


124

 Vẽ cây AA theo thứ tự nhập sau đây:


4, 7, 6, 3, 5, 9, 15, 27, 8, 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


125

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

Kết quả sau khi quay phải nút 7

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


130

4 6 7

Hai liên kết ngang liên tiếp

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


131

4 7

Chuẩn bị: Thêm 3


Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
132

4 7

3
6

3 4 7

Thêm 3

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


133

3 4 7

Chuẩn bị: Thêm 5


Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
134

3 4 7

Thêm 5

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


135

3 4 5 7

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


136

4 7

3 5

Mức hiện hành của 4, 6?

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


137

4 6

3 5 7

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


138

4 6

3 5 7

Chuẩn bị: Thêm 9

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


139

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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


142

4 6

3 5 9

7 15

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


143

4 6 9

3 5 15
7

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


144

4 9

3 5 7 15

Chuẩn bị: Thêm 27


Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
145

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

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


147

4 9

3 5 7 8 15 27

Chuẩn bị: Thêm 40


Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019
148

4 9

3 5 7 8 15 27

40

Thêm 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


149

4 9

3 5 7 8 15 27 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


150

4 9

3 5 7 8 27

15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019


151

4 9 27

3 5 7 8 15 40

Cấu trúc dữ liệu và giải thuật | fit@hcmus | 2019

You might also like