ữ ệ

C u trúc d  li u và gi

ậ i thu t

Cấu trúc cây

Gi ng viên:

Đậu Ngọc Hà Dương

Nội dung trình bày

2

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

3

Khái niệm

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Một số thuật ngữ

 Tree

 Search tree

 Binary search tree

 Balanced tree

 AVL tree

 AA tree

 Red-Black tree

4

 … ấ C u trúc d  li u và gi

ữ ệ ả ậ i thu t ­ HCMUS 2011

Cây tổng quát

5

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Cây tổng quát

Cây thư mục

6

Sơ đồ tổ chức ậ

ữ ệ ấ ả C u trúc d  li u và gi i thu t ­ HCMUS 2011

Định nghĩa

7

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

sau:

là m t cây. Cây này có

g cố  là

ậ ỉ

đ nhỉ ồ ợ 1. T p h p g m 1  ấ ủ đ 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

ả ử r là m t đ nh m i không thu c các cây Ti. Khi  r và các cây Ti t o thành

c ượ

ớ ớ ố r. Các cây T1, T2, … Tk đ

ộ ỉ ớ  s   ỉ ợ đó, t p h p T g m đ nh  ộ m t cây m i v i g c  ủ ố ọ g i là cây con c a g c r. ữ ệ ậ i thu t ­ HCMUS 2011 C u trúc d  li u và gi

ấ ả

Định nghĩa

8

Nút gốc

r

r 2

r 1

r k

T2

T1

Tk

Cây con

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các khái niệm

 node: đỉnh

 root: gốc cây

 leaf: lá

 inner node/internal node: đỉnh trong

 parent: đỉnh cha

 child: đỉnh con

 path: đường đi

9

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các khái niệm

10

Nút gốc

r

rk

r 2

r 1

r k

k 1

k 2

T2

T1

Tk

k 3

k 4

k 5

Cây con

Nút lá

Đường đi

k 6

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các khái niệm

 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

 depth/level: độ sâu/mức

ủ ườ

ng đi t

ộ ố ế

 M c (đ  sâu)c a node: Chi u dài c a đ node g c đ n node đó c ng thêm 1.

 height: chiều cao

 Chi u cao cây:

 Cây rỗng: 0

11

 Cây khác rỗng: Mức lớn nhất giữa các node của cây

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các khái niệm

12

Bậc = k Nút gốc

r

Bậc = 2

Độ cao = 4

rk

r 2

r 1

r k

k 1

k 2

T2

T1

Tk

k 3

k 4

k 5

Cây con

Nút lá

Đường đi

k 6

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

13

Phép duyệt cây

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép duyệt cây

 Đảm bảo đến mỗi node trên cây chính xác một

14

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)

ấ ậ ả i thu t ­ HCMUS 2011

 Duy t sau (Post­order)

ữ ệ ệ C u trúc d  li u và gi ữ  Duy t gi a (In­order)

Phép duyệt cây

Parent(a)?

Parent(b) = a

15

a

Eldest- Child(c) = g

c

b

e

d

f

g

h

NextSibling(g) = h

i

NextSibling(h)?

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép duyệt cây

16

Duyệt theo chiều sâu

a

b c

g e f h

i j k

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép duyệt cây

 Pre-order

 Post-order

17

void Preorder(NODE A)

void Postorder(NODE A)

{

{

NODE B;

NODE B;

Visit(A);

B = EldestChild(A); while (B != (cid:0)

(cid:0) ) {

B = EldestChild(A); while (B != (cid:0)

(cid:0) ) {

Preorder(B);

Postorder(B);

B = NextSibling(B);

B = NextSibling(B);

}

}

}

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Visit(A);

}

Phép duyệt cây

18

In-Order

void Inorder(NODE A) {

NODE B; B = EldestChild(A); if (B != (cid:0)

(cid:0) ) { Inorder(B); B = NextSibling(B);

} Visit(A); while (B != (cid:0)

(cid:0) ) {

Inorder(B); B = NextSibling(B);

}

}

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

19

Biểu diễn cây

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Bằng danh sách cây con

child

20

info id next

2 3 1 a

5 4 2 b

a

7 6 8 3 c

4 d 9 10

b

c

5 e

6 f 11

7 g

d

e

f

h

g

8 h

9 i

k

i

j

10 j ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

11 k

Bằng danh sách cây con

21

A Root

B C

D E F H G

I J K

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Bằng đỉnh trái nhất và đỉnh kề phải

22

Info Eldest Child Next Sibling

a

1 a 2 0

2 b 4 3

3 c 6 0

b

c

4 d 0 5

5 e 9 0

6 f 0 7

g

d

e

f

h

7 g 11 8

8 h 0 0

9 i 0 10

i

j

k

10 j 0 0

11 k 0 0

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Bằng đỉnh trái nhất và đỉnh kề phải

23

A Root

B C

D E F H G

I J K

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Bằng cha mỗi đỉnh

24

Info Parent

a

1 a 0

2 b 1

3 c 1

4 d 2

b

c

5 e 2

6 f 3

7 g 3

g

d

e

f

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 ­ HCMUS 2011

25

Cây nhị phân

 Binary tree

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Cây nhị phân

26

a

 Là cây mà mỗi đỉnh có bậc tối đa bằng 2.

b

c

 Các cây con được

d

e

f

g

gọi là cây con trái và cây con phải.

j

h

i

 Có toàn bộ các thao tác cơ bản của cây.

struct NODE {

Data key; NODE *pLeft; NODE *pRight;

};

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Một số ứng dụng

27

 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

Cây biểu thức: 4 * (3 – 4) + (1 + sin(30))

3 4 30

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Cây nhị phân tìm kiếm

 Cây nhị phân tìm kiếm là cây nhị phân thỏa mãn

28

các điều kiện sau:

1. Khóa của các đỉnh thuộc cây con trái nhỏ hơn

khóa gốc.

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.

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Cây nhị phân tìm kiếm

29

8

4

10

9

23

2

6

20

5

7

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Cây nhị phân tìm kiếm

 Đặ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

30

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Thao tác trên cây nhị phân tìm kiếm

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các thao tác

 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

32

ữ ệ ả ậ i thu t ­ HCMUS 2011

 Quay cây

ấ C u trúc d  li u và gi  Duyệt cây

Thêm phần tử

 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

33

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 ấ C u trúc d  li u và gi

ữ ệ ậ ả

với dữ liệu (khóa) cần thêm. Kết thúc i thu t ­ HCMUS 2011

Tìm kiếm phần tử

 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ữ

34

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 ấ C u trúc d  li u và gi

ữ ệ ậ ả i thu t ­ HCMUS 2011

thấy. Kết thúc.

Xóa phần tử

 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  m ng đ  xóa th .

35

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Sắp xếp

36

15

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

8

19

 Thứ tự duyệt các node

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

16

1

9

13

18

 Nêu nhận xét

ạ ữ ệ ắ ế

ể ễ

 Có th  d  dàng t o d  li u s p x p

14

ệ ữ n u dùng phép duy t gi a 15 13

ế 8

14

9

1

16

18

19

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép duyệt cây

 Duyệt trước

37

4 4

2 2 20 20

1 1 3 3 25 25

23 23

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép duyệt cây

 Duyệt giữa

38

4 4

2 2 20 20

1 1 3 3 25 25

23 23

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép duyệt cây

 Duyệt sau

39

4 4

2 2 20 20

1 1 3 3 25 25

23 23

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép quay trái

40

Quay trái cây P P P

b a

b a

T3 T1

T2 T3 T1 T2

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép quay trái

41

Quay trái cây P

P

18 35

8 35 18 50

8 20 50 20 55

55

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép quay phải

42

Quay phải cây P

P P

b a

a b T3 T 1

T1 T2 T 2 T 3

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Phép quay phải

43

Quay phải cây P

P

40 50

37 50 40 55

55 36 65 45 37 45

65

36

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Thời gian thực hiện các phép toán

 Đố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).

ở ng h p x u nh t: cây tr  thành danh sách liên

 Tr

ợ ườ k t: ế O(n).

ườ

 Tr

ng h p trung bình là bao nhiêu?

O(log2n)

44

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

 Tạo cây nhị phân tìm kiếm theo thứ tự nhập

45

như sau: 1, 8, 9, 12, 14, 15, 16, 18, 19

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

 Tạo cây nhị phân tìm kiếm theo thứ tự nhập

46

như sau: 1, 8, 9, 12, 14, 15, 16, 18, 19

1

8

9

12

14

15

16

18

19

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

47

Cây AVL

 AVL tree

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Giới thiệu

 Do G.M. Adelsen Velskii và E.M. Lendis đưa ra

48

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

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Định nghĩa

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

49

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Cây AVL

 Ví dụ :

50

12 12

8 8 18 18

11 17 5 5 11 17

7 4 4 7

Cây AVL?

Cây AVL?

2

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xây dựng cây cân bằng

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

 Cách làm gợi ý:

struct NODE {

51

Data key;

NODE *pLeft, *pRight;

int bal;

}; ấ C u trúc d  li u và gi  Trong đó giá trị bal (balance, cân bằng) có thể

ữ ệ ậ ả i thu t ­ HCMUS 2011

là: 0: cân bằng; 1: lệch trái; 2: lệch phải

Các trường hợp mất cân bằng

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

 Mất cân bằng 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)

52

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các trường hợp mất cân bằng

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

53

12

8 18

17 5

4

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các trường hợp mất cân bằng

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

54

12

8 18

17 5

7

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các trường hợp mất cân bằng

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

55

12

8 18

11 5 22

25 7 4

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các trường hợp mất cân bằng

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

56

12

8 18

11 5 22

7 4 20

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

 Giả sử tại một node cây xảy ra mất cân bằng

57

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 ­ HCMUS 2011

Xử lý mất cân bằng

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

58

Quay trái cây P P P

b a Q

b a

h+1 T1 h

T3

h h+1 h h T2 T1 T2

T3

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

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

59

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

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

60

Quay trái cây P

P

18 35

Q

8 35 18 50

8 20 50 20 55

55

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

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

ướ

 B c 1: quay ph i Q

61

ướ

P

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

a

Q

b h T1

c h T4

h-1 T3 h T2

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

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

 B c 1: quay ph i cây Q

62

ướ P

P Quay phải cây Q

a a

Q Q

c b h h T1 T 1

b h c h T4 T 2

T3 h- 1 T3 h-1 h h T2 T 4

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

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

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

63

ướ P

P Quay trái cây P

c a

Q

a c b T1 h

b h T2 T1 T2 h T 4 T 3 h- 1

h h

T3 h- 1 T4 h

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

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

64

P Quay phải cây Q

35 35

Q

50 40 18 18

37 50 40 55 8 20 8 20

36 45 55 65 37 45

36 65

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

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

65

P Quay trái cây P

35 40 Q

40 18 50 35

37 50 45 55 8 20 37 18

36 45 55 65 36 8 20

65

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xử lý mất cân bằng

 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

66

ấ ữ ệ ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011 ả  Quay phải

Xử lý mất cân bằng

67

Theo Wikipedia ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Thao tác tìm kiếm

 Thực hiện hoàn toàn tương tự cây nhị phân tìm

68

kiếm.

8

4

10

9

23

2

6

20

5

7

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Thao tác thêm phần tử

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

69

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 ­ HCMUS 2011

Thao tác xóa phần tử

 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

70

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 ­ HCMUS 2011

Thao tác xóa phần tử

 Ví dụ: xóa 35

71

Phần tử thế mạng là 36

40 40

50 50 36 35

55 55 45 45 37 37 18 18

36 8 20 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 ­ HCMUS 2011

Thao tác xóa phần tử

 Xóa phần tử 45

72

40 40

50 50 36 36

55 55 45 37 37 18 18

65 8 20 8 20 65

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

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Thao tác xóa phần tử

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

73

Quay trái tại node 50

40 40

55 50 36 36

50 65 37 55 18 37 18

65 8 20 8 20

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

74

Cây AA

 AA tree

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Hình thành

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

75

Đ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 ­ HCMUS 2011

Các khái niệm

 Mức của node

 Liên kết ngang

76

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các khái niệm

 Mức của node:

ế

 S  liên k t

node đó đ n node NULL.

ế trái t

 Mức của NULL là 0.

 Mức của node lá là 1.

77

15 M c 2ứ

M c 1ứ 5 10 20

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các khái niệm

 Liên kết ngang:

ế

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

78

15

5 10 20

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Tính chất

 Cây AA là cây nhị phân tìm kiếm thỏa mãn các

79

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 ữ ệ C u trúc d  li u và gi

i 2 liên k t ngang liên ti p. i thu t ­ HCMUS 2011

ứ ớ

ơ

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

ấ ậ

Ví dụ

80

70 30

15 50 60 85

80 90 35 40 55 65 5 10 20

ứ ủ M c c a các node?

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

81

70 30

15 50 60 85

80 90 35 40 55 65 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 ­ HCMUS 2011

Ví dụ

82

70 30

15 50 60 85

80 90 35 40 55 65 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 ­ HCMUS 2011

Ví dụ

83

70 30

15 50 60 85

80 90 35 40 55 65 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 ­ HCMUS 2011

Ví dụ

84

70 30

15 50 60 85

80 90 35 40 55 65 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 ­ HCMUS 2011

Ví dụ

85

70 30

15 50 60 85

80 90 35 40 55 65 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 ­ HCMUS 2011

Các phép biến đổi cây

 Skew

 Split

86

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các phép biến đổi cây

 Skew:

ể ạ ỏ

ế

 Dùng đ  lo i b  liên k t ngang trái.

87

P X P X

A B C A B C

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Các phép biến đổi cây

 Split:

ể ạ ỏ

ế

ế  Dùng đ  lo i b  2 liên k t ngang liên ti p

88

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 ­ HCMUS 2011

Các phép biến đổi cây

 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

89

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 ­ HCMUS 2011

Các thao tác trên cây

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

90

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Thêm phần tử

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

91

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

ứ ự ậ

 V  cây AA theo th  t

nh p sau đây:

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

92

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

93

6

4 9 27

3 5 7 8 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

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

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

94

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

95

9

27 5 7

40 3 4 6 8 15

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Xóa phần tử

 Nếu không phải là node lá (mức của node là 1),

96

tìm phần tử thế mạng:

ầ ử ớ

 Ph n t

l n nh t bên nhánh trái (node lá).

 Xóa node lá:

ứ ủ

ứ ủ

ế

ỏ  Gi m m c c a node cha n u m c c a node lá 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 ­ HCMUS 2011

Ví dụ

 Xóa phần tử 8

97

6

4 9 27

3 5 7 8 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

 Xóa phần tử 8

98

6

4 9 27

3 5 7 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

 Xóa phần tử 5

99

6

4 9 27

3 5 7 8 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

 Xóa phần tử 5

100

6

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 ­ HCMUS 2011

Ví dụ

 Xóa phần tử 5

101

6

3 4 9 27

Skew t i 4ạ

7 8 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

 Xóa phần tử 5

102

ả ứ Gi m m c

6

4 3 9 27

7 8 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

 Xóa phần tử 5

103

6 9 27

3 4 7 8 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

 Xóa phần tử 5

104

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 ­ HCMUS 2011

Ví dụ

 Xóa phần tử 5

105

9

6 27

3 4 7 8 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

106

Bài tập

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

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

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Bài tập

108

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.

ệ ế ế t k t qu  sau khi duy t cây theo các trình t ướ

 Cho bi ữ gi a, tr

c và sau.

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Bài tập

109

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 ­ HCMUS 2011

Bài tập

110

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 ­ HCMUS 2011

Bà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.

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Hỏi và Đáp

112

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Đọc thêm ví dụ thêm phần tử

113

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

ứ ự ậ

 V  cây AA theo th  t

nh p sau đây:

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

114

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

115

4

ẩ 7

ữ ệ ấ ả ậ Thêm 4 ị Chu n b : Thêm  C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

116

4

7

ẩ 6

ữ ệ ấ ả ậ Thêm 7 ị Chu n b : Thêm  C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

117

4

7

6

ữ ệ ậ ấ ả 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 ­ HCMUS 2011

Ví dụ

118

4

6 7

ả 7

ấ ả ậ Thêm 6 Quay ph i nút  ữ ệ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

119

4

6

7

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

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

120

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 ­ HCMUS 2011

Ví dụ

121

6

4 7

ẩ 3

ữ ệ ấ ả ậ ị Chu n b : Thêm  C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

122

6

4 7

3

6

3 4 7

Thêm 3

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

123

6

3 4 7

ẩ 5

ữ ệ ấ ả ậ ị Chu n b : Thêm  C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

124

6

3 4 7

5

Thêm 5

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

125

6

5 3 4 7

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

126

6

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 ­ HCMUS 2011

Ví dụ

127

4 6

7 3 5

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

128

4 6

7 3 5

ẩ ị Chu n b : Thêm 9

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

129

4 6

7 3 5

9

ẩ 15

ữ ệ ấ ả ậ Thêm 9 ị Chu n b : Thêm  C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

130

4 6

7 3 5

9

15

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

131

4 6

7 9 15 3 5

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

132

4 6

9 3 5

15 7

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

133

4 6 9

3 5 15 7

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

134

6

4 9

3 5 7 15

ẩ 27

ữ ệ ấ ả ậ ị Chu n b : Thêm  C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

135

6

4 9

3 5 7 15

27

8

ữ ệ ấ ả ậ Thêm 27 ị ẩ Chu n b : Thêm  C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

136

6

4 9

3 5 7 15

8 27

Thêm 8

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

137

6

4 9

8 3 5 7 15 27

ẩ 40

ữ ệ ấ ả ậ ị Chu n b : Thêm  C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

138

6

4 9

8 3 5 7 15 27

40

Thêm 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

139

6

4 9

8 3 5 7 15 27 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

140

6

4 9

3 5 7 27 8

15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011

Ví dụ

141

6

4 9 27

3 5 7 8 15 40

ữ ệ ấ ả ậ C u trúc d  li u và gi i thu t ­ HCMUS 2011