You are on page 1of 133

Cu trc cy (Tree)

Phm Thi Vng

Ni dung
Gii thiu khi nim cu trc cy. Cu trc d liu cy nh phn, cy nh phn tm kim Gii thiu cu trc d liu cy nh phn tm kim cn bng.

03/02/2014

Nhp mn CTDL v thut ton

Cy?
nh ngha 1: Cy l mt tp hp T cc phn t (gi l nt ca cy) trong c 1 nt c bit c gi l gc, cc nt cn li c chia thnh nhng tp ri nhau T1, T2 , ... , Tn theo quan h phn cp trong Ti cng l mt cy. Mi nt cp i s qun l mt s nt cp i+1. Quan h ny ngi ta cn gi l quan h cha-con
03/02/2014 Nhp mn CTDL v thut ton 3

Cy?
nh ngha 2: Cy l tp hp cc phn t c t chc : Hoc l tp rng(cy rng) Hoc tp khc rng trong c mt nt gc, cc nt cn li c phn thnh nhm, trong mi nhm l mt cy (cy con)

03/02/2014

Nhp mn CTDL v thut ton

V d
S t chc ca mt cng ty
Cng ty A

R&D

Kinh doanh

Tai vu

San xuat

Noi a

Quoc te

TV

CD

Amplier

Chau au
03/02/2014

My
Nhp mn CTDL v thut ton

Cac nc
5

Cy th mc
C:\

Documents and Settings

Program Files

My Music

Desktop

Favorites

Start Menu

Adobe

Microsoft Office

03/02/2014

Nhp mn CTDL v thut ton

03/02/2014

Nhp mn CTDL v thut ton

03/02/2014

Nhp mn CTDL v thut ton

Mt s khi nim c bn
Bc ca mt nt : l s cy con ca nt Bc ca mt cy : l bc ln nht ca cc nt trong cy. Cy c bc n th gi l cy nphn. Nt gc : l nt khng c nt cha. Nt l : l nt c bc bng 0 . Nt trong : l nt c bc khc 0 v khng phi l gc .
03/02/2014 Nhp mn CTDL v thut ton 9

V d
ROOT NODE
Manager Brad Owner Jake

Chef Carol

Waitress Joyce

Waiter Chris

Cook Max

Helper Len

03/02/2014

Nhp mn CTDL v thut ton

10

V d : Nt L
Owner Jake

Manager Brad

Chef Carol

Waitress Joyce

Waiter Chris

Cook Max

Helper Len

NODE l
Nhp mn CTDL v thut ton

03/02/2014

11

V d

Tree nodes

Tree edges
03/02/2014 Nhp mn CTDL v thut ton 12

V d

Gc(root) Nt trong
cha v con

03/02/2014

Nhp mn CTDL v thut ton

13

Mt s khi nim c bn
Mc ca mt nt:
Mc (gc (T) ) = 0. Gi T1, T2, T3, ... , Tn l cc cy con ca T0 Mc (T1) = Mc (T2) = ... = Mc (Tn) = Mc (T0) + 1.

03/02/2014

Nhp mn CTDL v thut ton

14

A Tree Has Levels


LEVEL 0
Manager Brad Owner Jake

Chef Carol

Waitress Joyce

Waiter Chris

Cook Max

Helper Len

03/02/2014

Nhp mn CTDL v thut ton

15

Level One
Owner Jake

LEVEL 1

Manager Brad

Chef Carol

Waitress Joyce

Waiter Chris

Cook Max

Helper Len

03/02/2014

Nhp mn CTDL v thut ton

16

Level Two
Owner Jake

Manager Brad

Chef Carol

LEVEL 2
Waitress Joyce Waiter Chris Cook Max Helper Len

03/02/2014

Nhp mn CTDL v thut ton

17

nh ngha
Node 0 l t tin ca tt c cc node Nodes 1-6 l con chu ca node 0

Gc

Node 0

Node 1,2,3 con ca gc

Node 1 Node 1 l cha ca Nodes 4,5 Node 4 l


03/02/2014

Node 2

Node 3

Node 5
Nhp mn CTDL v thut ton

Node 6
Node 4, 5 l anh

em
18

Mt s khi nim c bn
di ng i t gc n nt x: Px = s nhnh cn i qua k t gc n x di ng i tng ca cy : PT PX
XT

trong Px l di ng i t gc n X.

di ng i trung bnh : PI = PT/n (n l s nt trn cy T). Rng cy: l tp hp nhiu cy trong th t cc cy l quan trng.
03/02/2014 Nhp mn CTDL v thut ton 19

Nhn xt
Trong cu trc cy khng tn ti chu trnh T chc ca cu trc cy cho php truy cp nhanh n cc phn t ca n.

03/02/2014

Nhp mn CTDL v thut ton

20

Depth-first Search

03/02/2014

Nhp mn CTDL v thut ton

21

Breadth-first Search

03/02/2014

Nhp mn CTDL v thut ton

22

Cy nh phn
nh ngha: Cy nh phn l cy m mi nt c ti a 2 cy con

03/02/2014

Nhp mn CTDL v thut ton

23

Cy nh phn
Cay con trai Cay con phai

Hnh anh mot cay nh phan


03/02/2014 Nhp mn CTDL v thut ton 24

Cy nh phn
Hoc l cy rng Hoc l gm
1 node gc v mt con tri, mt cy con phi

03/02/2014

Nhp mn CTDL v thut ton

25

Cy nh phn
Cy nh phn dng biu din mt biu thc ton hc:

03/02/2014

Nhp mn CTDL v thut ton

26

A Subtree
Owner Jake

Manager Brad

Chef Carol

Waitress Joyce

Waiter Chris

Cook Max

Helper Len

LEFT SUBTREE OF ROOT NODE


03/02/2014 Nhp mn CTDL v thut ton 27

Another Subtree
Owner Jake

Manager Brad

Chef Carol

Waitress Joyce

Waiter Chris

Cook Max

Helper Len

RIGHT SUBTREE OF ROOT NODE


03/02/2014 Nhp mn CTDL v thut ton 28

Mt s tnh cht ca cy nh phn


S nt nm mc i 2i. S nt l 2h-1, vi h l chiu cao ca cy. Chiu cao ca cy h log2(s nt trong cy). S nt trong cy 2h-1.

03/02/2014

Nhp mn CTDL v thut ton

29

Cy nh phn y
0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8
k=3
03/02/2014

2k+1, 2k+2
30

Nhp mn CTDL v thut ton

Biu din cy nh phn T


ng vi mt nt, ta s dng mt bin ng lu tr cc thng tin sau:
Thng tin lu tr ti nt. a ch nt gc ca cy con tri trong b nh. a ch nt gc ca cy con phi trong b nh

03/02/2014

Nhp mn CTDL v thut ton

31

Biu din cy nh phn T


typedef struct TNODE { Data Key;
// Data la kieu d lieu ng vi thong tin lu tai nut

TNODE *pLeft, *pRight; }; typedef TNODE *TREE; TREE root;

03/02/2014

Nhp mn CTDL v thut ton

32

Binary tree
a

d g h

e i

03/02/2014

Nhp mn CTDL v thut ton

33

Duyt cy nh phn
C 3 kiu duyt chnh c th p dng trn cy nh phn:
Duyt theo th t trc (NLR) Duyt theo th t gia (LNR) Duyt theo th t sau (LRN).

Tn ca 3 kiu duyt ny c t da trn trnh t ca vic thm nt gc so vi vic thm 2 cy con.

03/02/2014

Nhp mn CTDL v thut ton

34

Duyt theo th t trc (Node-Left-Right)


Kiu duyt ny trc tin thm nt gc sau thm cc nt ca cy con tri ri n cy con phi. Th tc duyt c th trnh by n gin nh sau:
void NLR(TREE Root) { if (Root != NULL) { <X ly Root>; //X ly tng ng theo nhu cau NLR(Root->pLeft); NLR(Root->pRight); } }
03/02/2014 Nhp mn CTDL v thut ton 35

V d v php duyt cy NLR


A B D E F C G

H
N

J
O

K
P

Kt qu: A B D H I N E J O K C F L P G M
03/02/2014 Nhp mn CTDL v thut ton 36

Duyt theo th t gia (Left- Node-Right)


Kiu duyt ny trc tin thm cc nt ca cy con tri sau thm nt gc ri n cy con phi. Th tc duyt c th trnh by n gin nh sau:

void LNR(TREE Root) { if (Root != NULL) { LNR(Root->pLeft); <X ly Root>; //X ly tng ng theo nhu cau LNR(Root->pRight); } }

03/02/2014

Nhp mn CTDL v thut ton

37

V d v php duyt cy LNR


A B D E F C G

H
N

J
O

K
P

Kt qu: H D N I B J O E K A F P L C M G
03/02/2014 Nhp mn CTDL v thut ton 38

Duyt theo th t sau (Left-Right-Node)


Kiu duyt ny trc tin thm cc nt ca cy con tri sau thm n cy con phi ri cui cng mi thm nt gc. Th tc duyt c th trnh by n gin nh sau:
void LRN(TREE Root) { if (Root != NULL) { LRN(Root->pLeft); LRN(Root->pRight); <X ly Root>; //X ly tng ng theo nhu cau } }
03/02/2014 Nhp mn CTDL v thut ton 39

V d v php duyt cy LRN


A B D E F C G

H
N

J
O

K
P

Kt qu: H N I D O J K E B P L F M G C A
03/02/2014 Nhp mn CTDL v thut ton 40

Duyt theo th t sau (Left-Right-Node)


Mt v d quen thuc trong tin hc v ng dng ca duyt theo th t sau l vic xc nh tng kch thc ca mt th mc trn a

03/02/2014

Nhp mn CTDL v thut ton

41

Duyt theo th t sau (Left-Right-Node)


Tnh ton gi tr ca biu thc da trn cy biu thc

(3 + 1)3/(9 5 + 2) (3(7 4) + 6) = 13
03/02/2014 Nhp mn CTDL v thut ton 42

Mt cch biu din cy nh phn khc


i khi, khi nh ngha cy nh phn, ngi ta quan tm n c quan h 2 chiu cha con ch khng ch mt chiu nh nh ngha phn trn. Lc , cu trc cy nh phn c th nh ngha li nh sau:
typedef struct tagTNode { DataType Key; struct tagTNode* pParent; struct tagTNode* pLeft; struct tagTNode* pRight; }TNODE; typedef TNODE *TREE;

03/02/2014

Nhp mn CTDL v thut ton

43

Mt cch biu din cy nh phn khc

03/02/2014

Nhp mn CTDL v thut ton

44

M s thao tc trn cy
m s node m s node l Tnh chiu cao

03/02/2014

Nhp mn CTDL v thut ton

45

m s node

03/02/2014

Nhp mn CTDL v thut ton

46

m s node
S node (EmptyTree) = 0 S node (Tree) = 1 + S node (Tree.Left) + S node (Tree.Right)

03/02/2014

Nhp mn CTDL v thut ton

47

m s node l

03/02/2014

Nhp mn CTDL v thut ton

48

m s node l
S nt l (EmptyTree) = 0

S nt l(RootOnly) = 1
S nt l(Tree) = S nt l (Tree.Left) + S nt l (Tree.Right)

03/02/2014

Nhp mn CTDL v thut ton

49

Tnh chiu cao

03/02/2014

Nhp mn CTDL v thut ton

50

Tnh chiu cao


Height(Tree) = 1 + maximum(Height(Tree.Left), Height(Tree.Right))

Depth(EmptyTree) = -1

03/02/2014

Nhp mn CTDL v thut ton

51

Cy nh phn tm kim

03/02/2014

Nhp mn CTDL v thut ton

52

nh ngha
Cy nh phn tm kim (CNPTK) l cy nh phn trong ti mi nt, kha ca nt ang xt ln hn kha ca tt c cc nt thuc cy con tri v nh hn kha ca tt c cc nt thuc cy con phi. Nu s nt trn cy l N th chi ph tm kim trung bnh ch khong log2N.

03/02/2014

Nhp mn CTDL v thut ton

53

V d
44

18

88

13

37

59

108

15

23

40

55

71

03/02/2014

Nhp mn CTDL v thut ton

54

03/02/2014

Nhp mn CTDL v thut ton

55

03/02/2014

Nhp mn CTDL v thut ton

56

Cy nh phn v tm kim nh phn

34 0

41 56 63 1 2 3

72 4

89 5

95 6

03/02/2014

Nhp mn CTDL v thut ton

57

Cy nh phn v tm kim nh phn

34 0

41 56 63 1 2 3

72 4

89 5

95 6

34 0

41 1

56 2

72 4

89 5

95 6

03/02/2014

Nhp mn CTDL v thut ton

58

Cy nh phn v tm kim nh phn

34 0

41 56 63 1 2 3

72 4

89 5

95 6

34 0

41 1

56 2

72 4

89 5

95 6

34 0
03/02/2014

56 2

72 4

95 6
59

Nhp mn CTDL v thut ton

Binary Search Tree (BST)


63

41

89

34

56

72

95

03/02/2014

Nhp mn CTDL v thut ton

60

Duyt cy nh phn tm kim


Thao tc duyt cy trn cy nh phn tm kim hon ton ging nh trn cy nh phn.

03/02/2014

Nhp mn CTDL v thut ton

61

V d BST
25

10
3 1 5 6 12 13 18 20 29 35 32

37
50 41

Duyt inorder: 1 3 5 6 10 12 13 18 20 25 29 32 35 37 41 50
03/02/2014 Nhp mn CTDL v thut ton 62

V d BST
25

10
3 1 5 6 12 13 18 20 29 35 32

37
50 41

Duyt postorder:
03/02/2014 Nhp mn CTDL v thut ton 63

V d BST
25

10
3 1 5 6 12 13 18 20 29 35 32

37
50 41

Duyt preorder:
03/02/2014 Nhp mn CTDL v thut ton 64

V d tm kim trn BST


25

10
3 1 5 6 12 13 18 20 29 35 32

37
50 41

Ging Node gc nhau nh hn ln hn Khc nhau

Tm kim 13
03/02/2014

Tm thy

S node duyt: 5 S ln so snh: 9


65

Nhp mn CTDL v thut ton

V d tm kim trn BST


25

10
3 1 5 6 12 13 18 20 29 35 32

37
50 41

Khc nhau Node gc ln nh hn hn

Tm kim 14
03/02/2014

Khng tm thy

S node duyt: 5 S ln so snh: 10


66

Nhp mn CTDL v thut ton

Tm mt phn t x trong cy
TNODE* searchNode(TREE T, Data X) { if(T) { if(T->Key == X) return T; if(T->Key > X) return searchNode(T->pLeft, X); return searchNode(T->pRight, X); } return NULL; }

03/02/2014

Nhp mn CTDL v thut ton

67

Tm mt phn t x trong cy
TNODE * { TNODE while { if(x else searchNode(TREE Root, Data x)

*p = Root; (p != NULL)
== p->Key) return p;

if(x < p->Key) p = p->pLeft; else p = p->pRight; } return NULL; }

03/02/2014

Nhp mn CTDL v thut ton

68

Tm mt phn t x trong cy
S ln so snh ti a phi thc hin tm phn t X l h, vi h l chiu cao ca cy. Nh vy thao tc tm kim trn CNPTK c n nt tn chi ph trung bnh khong O(log2n) .

03/02/2014

Nhp mn CTDL v thut ton

69

Thm mt phn t x vo cy
Vic thm mt phn t X vo cy phi bo m iu kin rng buc ca CNPTK. Ta c th thm vo nhiu ch khc nhau trn cy, nhng nu thm vo mt nt ngoi s l tin li nht do ta c th thc hin qu trnh tng t thao tc tm kim. Khi chm dt qu trnh tm kim cng chnh l lc tm c ch cn thm.

03/02/2014

Nhp mn CTDL v thut ton

70

Thm mt phn t x vo cy
Hm insert tr v gi tr 1 khi khng b nh 0 khi gp nt c 1 khi thnh cng

03/02/2014

Nhp mn CTDL v thut ton

71

Thm mt phn t x vo cy
int insertNode(TREE &T, Data X) { if (T) { if(T->Key == X) return 0; // a co if(T->Key > X) return insertNode(T->pLeft, X); else return insertNode(T->pRight, X); } T = new TNode; if (T == NULL) return -1; // thieu bo nh T->Key = X; T->pLeft = T->pRight = NULL; return 1; // them vao thanh cong }
03/02/2014 Nhp mn CTDL v thut ton 72

V d 4, 6, 1, 2, 5, 7, 3

4
1 2 3
03/02/2014 Nhp mn CTDL v thut ton 73

6 5
7

30 12 17 22

30, 12, 17, 49, 22, 65, 51, 50, 70, 68

49
65 51 50
Nhp mn CTDL v thut ton

70 68
74

03/02/2014

Hy mt phn t c kha x
Vic hy mt phn t X ra khi cy phi bo m iu kin rng buc ca CNPTK. C 3 trng hp khi hy nt X c th xy ra:
X l nt l. X ch c 1 con (tri hoc phi). X c c 2 con

03/02/2014

Nhp mn CTDL v thut ton

75

Trng hp 1: X l nt l.
ch n gin hy X v n khng mc ni n phn t no khc
T/h 1: huy X=40 44

18

88

13

37

59

108

15

23

40

55

71

03/02/2014

Nhp mn CTDL v thut ton

76

Trng hp 2: X ch c 1 con (tri hoc phi)


trc khi huy X ta moc noi cha cua X vi con duy nhat cua no
T/h 2: huy X=37
44

18

88

13

37

59

108

15

23

55

71

03/02/2014

Nhp mn CTDL v thut ton

77

Trng hp 3: X c 2 con
Khng th hy trc tip do X c 2 con Hy gin tip:
Thay v hy X, ta s tm mt phn t th mng Y. Phn t ny c ti a mt con. Thng tin lu ti Y s c chuyn ln lu ti X. Sau , nt b hy tht s s l Y ging nh 2 trng hp u.

Vn : chn Y sao cho khi lu Y vo v tr ca X, cy vn l CNPTK.


03/02/2014 Nhp mn CTDL v thut ton 78

Trng hp 3: X c 2 con
Vn l phi chn Y sao cho khi lu Y vo v tr ca X, cy vn l CNPTK. C 2 phn t tha mn yu cu:
Phn t tri nht trn cy con phi. Phn t phi nht trn cy con tri.

Vic chn la phn t no l phn t th mng hon ton ph thuc vo thch ca ngi lp trnh. y, ta s chn phn t tri nht trn cy con phi lm phn t th mng.
03/02/2014 Nhp mn CTDL v thut ton 79

Trng hp 3: X c 2 con
Khi hy phn t X=18 ra khi cy, phn t 23 l phn t th mng:
T/h 3: huy X=18 44

18

88

13

23

37

59

108

15

23

40

55

71

03/02/2014

Nhp mn CTDL v thut ton

30

80

Trng hp 3: X c 2 con
Hm delNode tr v gi tr 1, 0 khi hy thnh cng hoc khng c X trong cy: int delNode(TREE &T, Data X) Hm searchStandFor tm phn t th mng cho nt p void searchStandFor(TREE &p, TREE &q)

03/02/2014

Nhp mn CTDL v thut ton

81

int delNode(TREE &T, Data X) { if(T== NULL) return 0; if(T->Key > X) return delNode(T->pLeft, X); if(T->Key < X) return delNode(T->pRight, X); //T->Key == X TNode* p = T; if(T->pLeft == NULL) T = T->pRight; else if(T->pRight == NULL) T = T->pLeft; else // T c 2 con searchStandFor(p, T->pRight); delete p; }
03/02/2014 Nhp mn CTDL v thut ton 82

void searchStandFor(TREE &p, TREE &q) { if(q->pLeft) searchStandFor(p, q->pLeft); else { p->Key = q->Key; p = q; q = q->pRight; } }

03/02/2014

Nhp mn CTDL v thut ton

83

Remove
Remove 51

03/02/2014

Nhp mn CTDL v thut ton

84

Remove
Remove 83

03/02/2014

Nhp mn CTDL v thut ton

85

Remove
Remove 36

03/02/2014

Nhp mn CTDL v thut ton

86

V d
Remove root 2 ln

03/02/2014

Nhp mn CTDL v thut ton

87

V d
remove 15

03/02/2014

Nhp mn CTDL v thut ton

88

V d
42 l th mng

03/02/2014

Nhp mn CTDL v thut ton

89

V d

03/02/2014

Nhp mn CTDL v thut ton

90

V d
Kt qu xo ln 1

03/02/2014

Nhp mn CTDL v thut ton

91

V d
remove 42

03/02/2014

Nhp mn CTDL v thut ton

92

V d

03/02/2014

Nhp mn CTDL v thut ton

93

V d

03/02/2014

Nhp mn CTDL v thut ton

94

V d
removed 15, sau 42 c

03/02/2014

Nhp mn CTDL v thut ton

95

Hy ton b cy nh phn tm kim


Vic ton b cy c th c thc hin thng qua thao tc duyt cy theo th t sau. Ngha l ta s hy cy con tri, cy con phi ri mi hy nt gc.
void removeTree(TREE &T) { if(T) { removeTree(T->pLeft); removeTree(T->pRight); delete(T); } }
03/02/2014 Nhp mn CTDL v thut ton 96

Nhn xt
Tt c cc thao tc searchNode, insertNode, delNode u c phc tp trung bnh O(h), vi h l chiu cao ca cy Trong trong trng hp tt nht, CNPTK c n nt s c cao h = log2(n). Chi ph tm kim khi s tng ng tm kim nh phn trn mng c th t. Trong trng hp xu nht, cy c th b suy bin thnh 1 danh sch lin kt (khi m mi nt u ch c 1 con tr nt l). Lc cc thao tc trn s c phc tp O(n). V vy cn c ci tin cu trc ca CNPTK t c chi ph cho cc thao tc l log2(n).

03/02/2014

Nhp mn CTDL v thut ton

97

1,2,3,4,5 1 2 3 4 5
03/02/2014 Nhp mn CTDL v thut ton 98

Cy nh phn cn bng (AVL tree)

03/02/2014

Nhp mn CTDL v thut ton

99

nh ngha
Cy nh phn tm kim cn bng l cy m ti mi nt ca n cao ca cy con tri v ca cy con phi chnh lch khng qu mt.

03/02/2014

Nhp mn CTDL v thut ton

100

Cy AVL
44

23

88

13

37

59

108

15
03/02/2014

30

40

55

71
101

Nhp mn CTDL v thut ton

Cy AVL
Lch s cy cn bng (AVL Tree):
AVL l tn vit tt ca cc tc gi ngi Nga a ra nh ngha ca cy cn bng Adelson-Velskii v Landis (1962). T cy AVL, ngi ta pht trin thm nhiu loi CTDL hu dng khc nh cy en (Red-Black Tree), B-Tree,

Cy AVL c chiu cao O(log2(n)).


03/02/2014 Nhp mn CTDL v thut ton 102

Cy AVL
Ch s cn bng ca mt nt: nh ngha: Ch s cn bng ca mt nt l hiu ca chiu cao cy con phi v cy con tri ca n. i vi mt cy cn bng, ch s cn bng (CSCB) ca mi nt ch c th mang mt trong ba gi tr sau y:
CSCB(p) = 0 cao cy tri (p) = cao cy phi (p) CSCB(p) = 1 cao cy tri (p) < cao cy phi (p) CSCB(p) =-1 cao cy tri (p) > cao cy phi (p)

03/02/2014

Nhp mn CTDL v thut ton

103

tin trong trnh by, chng ta s k hiu nh sau: p->balFactor = CSCB(p); cao cy tri (p) k hiu l hL cao cy phi(p) k hiu l hR

03/02/2014

Nhp mn CTDL v thut ton

104

nh ngha
#define LH #define EH #define RH -1 0 1

/* Cay con trai cao hn */ /* Hai cay con bang nhau */ /* Cay con phai cao hn */

typedef struct tagAVLNode { char balFactor; // Ch so can bang Data key; struct tagAVLNode* pLeft; struct tagAVLNode* pRight; }AVLNode; typedef AVLNode *AVLTree;

03/02/2014

Nhp mn CTDL v thut ton

105

Trng hp thm hay hy mt phn t trn cy c th lm cy tng hay gim chiu cao, khi phi cn bng li cy. Vic cn bng li mt cy s phi thc hin sao cho ch nh hng ti thiu n cy nhm gim thiu chi ph cn bng. Cc thao tc c trng ca cy AVL:
Thm mt phn t vo cy AVL. Hy mt phn t trn cy AVL. Cn bng li mt cy va b mt cn bng.
03/02/2014 Nhp mn CTDL v thut ton 106

Cc trng hp mt cn bng
Ta s khng kho st tnh cn bng ca 1 cy nh phn bt k m ch quan tm n cc kh nng mt cn bng xy ra khi thm hoc hy mt nt trn cy AVL Nh vy, khi mt cn bng, lch chiu cao gia 2 cy con s l 2 C 6 kh nng sau:
Trng hp 1 - Cy T lch v bn tri : 3 kh nng Trng hp 2 - Cy T lch v bn phi: 3 kh nng

03/02/2014

Nhp mn CTDL v thut ton

107

Trng hp 1: cy T lch v bn tri


T L T1 R h L1 R1 h-1 T L T1 R h L1 L1 h T h-1 h-1

T1 R

h-1

L1

R1

h-1

03/02/2014

Nhp mn CTDL v thut ton

108

Trng hp 2: cy T lch v bn phi


T T

h-1

L h-1

T1

h-1

R L h

T1

L1

R1

h
T

L1

R1

h-1

h-1

L h

T1

L1

R1

03/02/2014

Nhp mn CTDL v thut ton

109

Cc trng hp mt cn bng
Cc trng hp lch v bn phi hon ton i xng vi cc trng hp lch v bn tri. V vy, ch cn kho st trng hp lch v bn tri. Trong 3 trng hp lch v bn tri, trng hp T1 lch phi l phc tp nht. Cc trng hp cn li gii quyt rt n gin.
03/02/2014 Nhp mn CTDL v thut ton 110

Cn bng li cy AVL
T/h 1.1: cy T1 lch v bn tri. Ta thc hin php quay n Left-Left
T T1

T1 R

h-1

L1
h-1 R1 R h-1

L1

R1

h-1

03/02/2014

Nhp mn CTDL v thut ton

111

T/h 1.2: cy T1 khng lch. Ta thc hin php quay n Left-Left


T T1

T1 R

h-1

T L1 h R1 R

L1

R1

h-1

03/02/2014

Nhp mn CTDL v thut ton

112

T/h 1.3: cy T1 lch v bn phi. Ta thc hin php quay kp Left-Right Do T1 lch v bn phi ta khng th p dng php quay n p dng trong 2 trng hp trn v khi cy T s chuyn t trng thi mt cn bng do lch tri thnh mt cn bng do lch phi ? cn p dng cch khc.

03/02/2014

Nhp mn CTDL v thut ton

113

T L T1 R R1 h T1

h-1 h-1

R L1 L2 T2 T2

h-1

h-1

L1

R1
R2

T1

h-1
03/02/2014

L1

L2

R2

h-1
114

Nhp mn CTDL v thut ton

Lu :
Trc khi cn bng cy T c chiu cao h+2 trong c 3 trng hp 1.1, 1.2 v 1.3. Sau khi cn bng,
Trng hp 1.1 v 1.3 cy c chiu cao h+1 Trng hp 1.2 cy vn c chiu cao h+2. y l trng hp duy nht sau khi cn bng nt T c c ch s cn bng 0. Thao tc cn bng li trong tt c cc trng hp u c phc tp O(1).

03/02/2014

Nhp mn CTDL v thut ton

115

Cn bng li cy AVL
T/h 1.1: cy T1 lch v bn tri. Ta thc hin php quay n Left-Left
T T1

T1 R

h-1

L1
h-1 R1 R h-1

L1

R1

h-1

03/02/2014

Nhp mn CTDL v thut ton

116

Quay n Left-Left
void rotateLL(AVLTree &T) //quay n Left-Left { AVLNode* T1 = T->pLeft; T->pLeft = T1->pRight; T1->pRight = T; switch(T1->balFactor) { case LH: T->balFactor = EH; T1->balFactor = EH; break; case EH: T->balFactor = LH; T1->balFactor = RH; break; } T = T1; }

03/02/2014

Nhp mn CTDL v thut ton

117

Quay n Right-Right
void rotateRR(AVLTree &T)//quay n Right-Right { AVLNode* T1 = T->pRight; T->pRight = T1->pLeft; T1->pLeft = T; switch(T1->balFactor) { case RH: T->balFactor = EH; T1->balFactor= EH; break; case EH: T->balFactor = RH; T1->balFactor= LH; break; } T = T1; }

03/02/2014

Nhp mn CTDL v thut ton

118

Quay kep Left-Right


void rotateLR(AVLTree &T)//quay kp Left-Right { AVLNode* T1 = T->pLeft; AVLNode* T2 = T1->pRight; T->pLeft = T2->pRight; T2->pRight = T; T1->pRight = T2->pLeft; T2->pLeft = T1; switch(T2->balFactor) { case LH: T->balFactor = RH; T1->balFactor = EH; break; case EH: T->balFactor = EH; T1->balFactor = EH; break; case RH: T->balFactor = EH; T1->balFactor = LH; break; } T2->balFactor = EH; T = T2; }
03/02/2014 Nhp mn CTDL v thut ton

119

Quay kep Right-Left


void rotateRL(AVLTree &T)//quay { AVLNode* T1 = T->pRight; AVLNode* T2 = T1->pLeft; T->pRight = T2->pLeft; T2->pLeft = T; T1->pLeft = T2->pRight; T2->pRight = T1; switch(T2->balFactor) { case RH: T->balFactor = LH; break; case EH: T->balFactor = EH; break; case LH: T->balFactor = EH; break; } T2->balFactor = EH; T = T2; }
03/02/2014

kp Right-Left

T1->balFactor = EH; T1->balFactor = EH;

T1->balFactor = RH;

Nhp mn CTDL v thut ton

120

Cn bng khi cy b lch v bn tri


int balanceLeft(AVLTree &T)
//Cn bng khi cy b lch v bn tri

{ AVLNode* T1 = T->pLeft;

switch(T1->balFactor) case LH: rotateLL(T); return case EH: rotateLL(T); return case RH: rotateLR(T); return } return 0;
}
03/02/2014 Nhp mn CTDL v thut ton

{ 2; 1; 2;

121

Cn bng khi cy b lch v bn phi


int balanceRight(AVLTree &T )
//Cn bng khi cy b lch v bn phi

{
AVLNode* T1 = T->pRight; switch(T1->balFactor) case LH: rotateRL(T); return case EH: rotateRR(T); return case RH: rotateRR(T); return } return 0; }
03/02/2014 Nhp mn CTDL v thut ton 122

{ 2; 1; 2;

Thm mt phn t trn cy AVL


Vic thm mt phn t vo cy AVL din ra tng t nh trn CNPTK. Sau khi thm xong, nu chiu cao ca cy thay i, t v tr thm vo, ta phi ln ngc ln gc kim tra xem c nt no b mt cn bng khng. Nu c, ta phi cn bng li nt ny. Vic cn bng li ch cn thc hin 1 ln ti ni mt cn bng. Hm insertNode tr v gi tr 1, 0, 1 khi khng b nh, gp nt c hay thnh cng. Nu sau khi thm, chiu cao cy b tng, gi tr 2 s c tr v int insertNode(AVLTree &T, DataType X)

03/02/2014

Nhp mn CTDL v thut ton

123

Thm mt phn t trn cy AVL


int insertNode(AVLTree &T, DataType X) { int res; if (T) { if (T->key == X) return 0; // c if (T->key > X) { res = insertNode(T->pLeft, X); if(res < 2) return res; switch(T->balFactor) {case RH: T->balFactor = EH; return 1; case EH: T->balFactor = LH; return 2; case LH: balanceLeft(T); return 1; } insertNode2 03/02/2014 } Nhp mn CTDL v thut ton 124

Thm mt phn t trn cy AVL


int insertNode(AVLTree &T, DataType X) { ............................................ .......... else // T->key < X { res = insertNode(T-> pRight, X); if(res < 2) return res; switch(T->balFactor) {case LH: T->balFactor = EH; return 1; case EH: T->balFactor = RH; return 2; case RH: balanceRight(T); return 1; } insertNode3 } 03/02/2014 Nhp mn CTDL v thut ton 125

Thm mt phn t trn cy AVL


int insertNode(AVLTree &T, DataType X) { ............................................ .......... T = new TNode; if(T == NULL) return -1; //thiu b nh T->key = X; T->balFactor = EH; T->pLeft = T->pRight = NULL; return 2; // thnh cng, chiu cao tng }
03/02/2014 Nhp mn CTDL v thut ton 126

Hy mt phn t trn cy AVL


Cng ging nh thao tc thm mt nt, vic hy mt phn t X ra khi cy AVL thc hin ging nh trn CNPTK. Sau khi hy, nu tnh cn bng ca cy b vi phm ta s thc hin vic cn bng li. Tuy nhin vic cn bng li trong thao tc hy s phc tp hn nhiu do c th xy ra phn ng dy chuyn. Hm delNode tr v gi tr 1, 0 khi hy thnh cng hoc khng c X trong cy. Nu sau khi h?y, chiu cao cy b gim, gi tr 2 s c tr v: int delNode(AVLTree &T, DataType X)

03/02/2014

Nhp mn CTDL v thut ton

127

Hy mt phn t trn cy AVL


int delNode(AVLTree &T, DataType X) { int res; if(T==NULL) return 0; if(T->key > X) { res = delNode (T->pLeft, X); if(res < 2) return res; switch(T->balFactor) { case LH: T->balFactor = EH; return 2; case EH: T->balFactor = RH; return 1; case RH: return balanceRight(T); } } // if(T->key > X)
.................................................... delNode2 03/02/2014 Nhp mn CTDL v thut ton 128 ..

Hy mt phn t trn cy AVL


int delNode(AVLTree &T, DataType X) {
.................................................... ..

if(T->key < X) { res = delNode (T->pRight, X); if(res < 2) return res; switch(T->balFactor) { case RH: T->balFactor = EH; return 2; case EH: T->balFactor = LH; return 1; case LH: return balanceLeft(T); } } // if(T->key < X) delNode3
03/02/2014 Nhp mn CTDL v thut ton 129 ....................................................

Hy mt phn t trn cy AVL


int delNode(AVLTree &T, DataType X) {...................................................... else //T->key == X { AVLNode* p = T; if(T->pLeft == NULL) { T = T->pRight; res = 2; } else if(T->pRight == NULL) { T = T->pLeft; res = 2; } else //T c c 2 con { res = searchStandFor(p,T->pRight); if(res < 2) return res; switch(T->balFactor) { case RH: T->balFactor = EH; return 2; case EH: T->balFactor = LH; return 1; case LH: return balanceLeft(T); } } delete p; return res; 03/02/2014 Nhp mn CTDL v thut ton 130 }

Tm phn t th mng searchStandFor


int searchStandFor(AVLTree &p, AVLTree &q) //Tm phn t th mng { int res; if(q->pLeft) { res = searchStandFor(p, q->pLeft); if(res < 2) return res; switch(q->balFactor) { case LH: q->balFactor = EH; return 2; case EH: q->balFactor = RH; return 1; case RH: return balanceRight(T); } } else { p->key = q->key; p = q; q = q->pRight; return 2; } }

03/02/2014

Nhp mn CTDL v thut ton

131

Cy AVL
Nhn xt: Thao tc thm mt nt c phc tp O(1). Thao tc hy mt nt c phc tp O(h). Vi cy cn bng trung bnh 2 ln thm vo cy th cn mt ln cn bng li; 5 ln hy th cn mt ln cn bng li.

03/02/2014

Nhp mn CTDL v thut ton

132

Cy AVL
Nhn xt:
Vic hu 1 nt c th phi cn bng dy chuyn cc nt t gc cho n phn t b hu trong khi thm vo ch cn 1 ln cn bng cc b. di ng tm kim trung bnh trong cy cn bng gn bng cy cn bng hon ton log2n, nhng vic cn bng li n gin hn nhiu. Mt cy cn bng khng bao gi cao hn 45% cy cn bng hon ton tng ng d s nt trn cy l bao nhiu.
03/02/2014 Nhp mn CTDL v thut ton 133

You might also like