You are on page 1of 72

TREES

(Cu trc cy)

Mc tiu
Gii thiu khi nim cu trc cy. Cu trc d liu cy nh phn tm kim: t chc, cc thut ton, ng dng. Gii thiu cu trc d liu cy nh phn tm kim

Cau truc D lieu - Cau truc cay

Cu trc cy

Cu trc cy

nh ngha : 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.

Cau truc D lieu - Cau truc cay

Cu trc cy

Cau truc D lieu - Cau truc cay

Cu trc cy

Cau truc D lieu - Cau truc cay

Cu trc cy
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 (s cy con ti a ca mt nt thuc cy ). Cy c bc n th gi l cy n-phn. Nt gc : l nt khng c nt cha. Nt l : l nt c bc bng 0 . Nt nhnh : l nt c bc khc 0 v khng phi l gc . 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.
7

Cau truc D lieu - Cau truc cay

Cu trc cy
Mt s khi nim c bn

di ng i t gc n nt x : l s nhnh cn i qua k t gc n x di ng i tng ca cy : P P


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

Cau truc D lieu - Cau truc cay

Khi nim
Cnh
Z B R

J A

gc nt
D

Cau truc D lieu - Cau truc cay

Cu trc cy
Mt s v d v i tng cc cu trc dng cy

S t chc ca mt cng ty
BB-Electronic Corp.

R&D

Kinh doanh

Tai vu

San xuat

Noi a

Quoc te

TV

CD

Amplier

Chau au
Cau truc D lieu - Cau truc cay

My

Cac nc
10

Cu trc cy
Mt s v d v i tng cc cu trc dng cy

Mc lc mt quyn sch
Student guide

Gii thieu

iem

Moi trng

NN LT

CT mau

Bai tap

Thc hanh

Thi

Cau truc D lieu - Cau truc cay

11

Cu trc cy
Nhn xt: Trong cu trc cy khng tn ti chu trnh

Cau truc D lieu - Cau truc cay

12

Cy nh phn

Cy nh phn

nh ngha: Cy nh phn l cy m mi nt c ti a 2 cy con Trong thc t thng gp cc cu trc c dng cy nh phn. Mt cy tng qut c th biu din thng qua cy nh phn.

Cau truc D lieu - Cau truc cay

14

Cy nh phn
Cy con tri Cy con phi

Hnh nh mt cy nh phn
Cau truc D lieu - Cau truc cay 15

Cy nh phn

Figure 7.3: Binary tree structure.


Cau truc D lieu - Cau truc cay 16

Cy nh phn

Figure 7.4: Skewed trees.


Cau truc D lieu - Cau truc cay 17

Cy nh phn

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

Cau truc D lieu - Cau truc cay

18

Cy nh phn
Mt s tnh cht ca cy nh phn

S nt nm mc i

2i
Mc

Chiu cao cy h l mc cao nht + 1. 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.
ng i (path) Tn cc node ca qu trnh i t node gc theo cc cy con n mt node no .

Cau truc D lieu - Cau truc cay

19

Cy nh phn
Biu din cy nh phn T

Cy nh phn l mt cu trc bao gm cc phn t (nt) c kt ni vi nhau theo quan h cha-con vi mi cha c ti a 2 con. biu din cy nh phn ta chn phng php cp pht lin kt. 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.
20

Cau truc D lieu - Cau truc cay

Cy nh phn

Cau truc D lieu - Cau truc cay

21

Cy nh phn
n gin, ta khai bo cu trc d liu nh sau : typedef struct NODE { int data; NODE* left; NODE* right; }; typedef struct NODE* TREE; TREE root;
Cau truc D lieu - Cau truc cay 22

Cy nh phn
Duyt cy nh phn

C 3 kiu duyt chnh c th p dng trn cy nh phn: Duyt theo th t trc (NLR)- Preorder Duyt theo th t gia (LNR)- Inorder Duyt theo th t sau (LRN)- Postorder Tn ca 3 kiu duyt ny c t da trn trnh t ca vic thm nt gc so vi vic thm 2 cy con.
23

Cau truc D lieu - Cau truc cay

Cy nh phn
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 l Root>;//X l tng ng theo nhu cu NLR(root->left); NLR(root->right); } }

Cau truc D lieu - Cau truc cay

24

Cy nh phn
Duyt theo th t trc (Node-Left-Right)

Mt v d: c mt quyn sch hay bi bo t u n cui nh minh ha trong hnh bn di:

Cau truc D lieu - Cau truc cay

25

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


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
Cau truc D lieu - Cau truc cay 26

Cy nh phn
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->left); <X l Root>; //X l tng ng theo nhu cu LNR(root->right); } }
27

Cau truc D lieu - Cau truc cay

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


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
Cau truc D lieu - Cau truc cay 28

Cy nh phn 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->left); LRN(root->right); <X l Root>; //X l tng ng theo nhu cu } }
29

Cau truc D lieu - Cau truc cay

Cy nh phn 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

Cau truc D lieu - Cau truc cay

30

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


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
Cau truc D lieu - Cau truc cay 31

Cy nh phn
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
Cau truc D lieu - Cau truc cay 32

Cy nh phn
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;

Cau truc D lieu - Cau truc cay

33

Cy nh phn
Mt cch biu din cy nh phn khc

Cau truc D lieu - Cau truc cay

34

Cy nh phn tm kim (Binary search tree)

Cy nh phn tm kim (BST)

nh ngha: cy nh phn tm kim (BST) 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.

Cau truc D lieu - Cau truc cay

36

Cy nh phn tm kim
44

18

88

13

37

59

108

15
Cau truc D lieu - Cau truc cay

23

40

55

71
37

Cu trc d liu
typedef struct NODE { int data; NODE* left; NODE* right; }; typedef struct NODE* TREE; TREE root;

Cau truc D lieu - Cau truc cay

38

Cc thao tc trn BST


a. Khi to cy BST Khi to cy BST: cho con tr qun l a ch nt gc v con tr NULL

void Init(Node &root) { root = NULL; }

Cau truc D lieu - Cau truc cay

39

Cc thao tc trn BST


To node:
Node* GetNode (int x) { p= new Node; if (p != NULL) { p-> Left = NULL; p-> Right = NULL; p-> Data = x; } return (p); }
Cau truc D lieu - Cau truc cay 40

Thm mt nt vo cy BST
int { InsertTree(tree &root , int x) if(root != NULL) { if(root->data==x) return 0; if(root->data>x) return InsertTree(root->letf,x); else return InsertTree(root->right,x); } else
Cau truc D lieu - Cau truc cay 41

else { root= new node; if(root==NULL) return -1; root->data=x; root->left=root->right=NULL; return 1;

}
}
Cau truc D lieu - Cau truc cay 42

To cy nh phn tm kim
Ta c th to mt cy nh phn tm kim bng cch lp li qu trnh thm 1 phn t vo mt cy rng. void CreateTree(tree &root) { int x,n; cout<<Nhap n = ; cin>>n; for(int i=1; i<=n;i++) { cout<<Nhap gia tri:; cin>>x; InsertTree(root,x); } } - Cau truc cay Cau truc D lieu

43

To cy nh phn tm kim
25 37 10 18 29 50 3 1 6
25
10 37

5 12

20

35 13 32 41

3
1 5
25 37 10 18 29 50

18
6 12 13
3 1 6

29
20 35 32
5 12 20

50
41

35

13

32

41
44

Cau truc D lieu - Cau truc cay

Duyt cy nh phn tm kim

Thao tc duyt cy trn cy nh phn tm kim hon ton ging nh trn cy nh phn. Lu : khi duyt theo th t gia, trnh t cc nt duyt qua s cho ta mt dy cc nt theo th t tng dn ca kha.

Cau truc D lieu - Cau truc cay

45

Duyt cy nh phn tm kim

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

Duyt nt gc, duyt cy con bn tri, duyt cy con bn phi


void NLR(TREE root) { if (root!=NULL) { cout<<root->data<<" "; NLR(root->left); NLR(root->right); } }- Cau truc cay Cau truc D lieu

46

Duyt cy nh phn tm kim

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

Duyt cy con bn tri, duyt nt gc, duyt cy con bn phi


void LNR(TREE root) { if (root!=NULL) { LNR(root->left); cout<<root->data<<" "; LNR(root->right); } }- Cau truc cay Cau truc D lieu

47

Duyt cy nh phn tm kim

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

Duyt cy con bn tri, duyt nt gc, duyt cy con bn phi


void LRN(TREE root) { if (root!=NULL) { LRN(root->left); LRN(root->right); cout<<root->data<<" "; } }- Cau truc cay Cau truc D lieu

48

Tm mt phn t x trong cy ( quy)

Tm mt phn t x trong cy ( quy):

NODE* searchNode(TREE root, int X) { if(root!=NULL) { if(root->data == X) return root; if(root->data > X) return searchNode(root->left, X); return searchNode(root->right, X); } return NULL; }

Cau truc D lieu - Cau truc cay

49

Tm mt phn t x trong cy (khng quy)

Tm mt phn t x trong cy (khng quy):

NODE * searchNode(TREE root, int x) { TNODE *p = root; while (p != NULL) { if(x == p->data) return p; else if(x < p->data) p = p->left; else p = p->right; } return NULL; }

Cau truc D lieu - Cau truc cay

50

Tm mt phn t x=13 trong cy


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
Cau truc D lieu - Cau truc cay

Tm thy

S node duyt: 5 S ln so snh: 9


51

Tm mt phn t x=13 trong cy


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
Cau truc D lieu - Cau truc cay

Tm thy

S node duyt: 5 S ln so snh: 9


52

Tm mt phn t x trong cy
Nhn xt:
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) .

Cau truc D lieu - Cau truc cay

53

Tm mt phn t x trong cy
Tm X=55 44 44 < X

18

88 > X

88

13

37

59 > X

59

108

15

23

40

55

71

Cau truc D lieu - Cau truc cay

54

Tm mt phn t x trong cy

Cau truc D lieu - Cau truc cay

55

Thm mt phn t x vo cy

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. Hm insert tr v gi tr 1, 0, 1 khi khng b nh, gp nt c hay thnh cng:

Cau truc D lieu - Cau truc cay

56

Thm mt phn t x vo cy
int insertNode(TREE &root, Data X) { if (root) { if(root->data == X) return 0; // c if(root->data > X) return insertNode(root->left, X); else return insertNode(root->right, X); } root = new Node; if (root == NULL) return -1; // thiu b nh root->data = X; root->left = root->right = NULL; return 1; // thm vo thnh cng }
Cau truc D lieu - Cau truc cay 57

Thm mt phn t x vo cy
44 44 < X

Them X=50

18

88 > X

88

13

37

59 > X

59

108

15

23

40 55 > X 50

55

71

Cau truc D lieu - Cau truc cay

58

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

Cau truc D lieu - Cau truc cay

59

Hy mt phn t c kha x
Trng hp 1: X l nt l.

1. Xa node ny

2. Gn lin kt t cha ca n thnh rng


Cau truc D lieu - Cau truc cay 60

Hy mt phn t c kha x
Trng hp 1: X l nt l.

V d : 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 Cau truc D lieu - Cau truc cay

23

40

55

71 61

Hy mt phn t c kha x
Trng hp 2: X ch c 1 con (tri hoc phi)
1. Gn lin kt t cha ca n u u

xung con duy nht ca n 2. Xa node ny

x v

Cau truc D lieu - Cau truc cay

62

Hy mt phn t c kha x
Trng hp 2: X ch c 1 con (tri hoc phi)

Trng hp th hai: trc khi hy X ta mc ni cha ca X vi con duy nht ca n


T/h 2: huy X=37 44

18

88

13

37

59

108

15

23

55

71

Cau truc D lieu - Cau truc cay

63

Hy mt phn t c kha x
Trng hp 3: X c 2 con

1. Tm w l node trc node x trn php duyt cy inorder (chnh l node cc phi ca cy con bn tri ca x) 2. Thay x bng w 3. Xa node w c (ging trng hp 1 hoc 2 xt)
Cau truc D lieu - Cau truc cay 64

Hy mt phn t c kha x
Trng hp 3: X c 2 con

Trng hp cui cng: 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.


65

Cau truc D lieu - Cau truc cay

Hy mt phn t c kha x
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 nh nht (tri nht) trn cy con phi. Phn t ln nht (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 phi nht trn cy con tri lm phn t th mng.

Cau truc D lieu - Cau truc cay

66

Hy mt phn t c kha x
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

37

59

108

15

23

40

55

71

Cau truc D lieu - Cau truc cay

30

67

Hy mt phn t c kha x
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 &root, Data X)

Hm searchStandFor tm phn t th mng cho nt p


void searchStandFor(TREE &p, TREE &q)

Cau truc D lieu - Cau truc cay

68

Hy mt phn t c kha x
int delNode(TREE &root, Data X) { if(root== NULL) return 0; if(root->data > X) return delNode(root->left, X); if(root->data < X) return delNode(root->right, X); //T->Key == X Node* p = root; if(root->left == NULL) root = root->right; else if(root->right == NULL) root = root->left; else // T c d 2 con searchStandFor(p, root->right); delete p; }
Cau truc D lieu - Cau truc cay 69

Hy mt phn t c kha x
void searchStandFor(TREE &p, TREE &q) { if(q->left) searchStandFor(p, q->left); else { p->data = q->data; p = q; q = q->right; } }
Cau truc D lieu - Cau truc cay 70

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 &root) { if(root) { removeTree(root->reft); removeTree(root->right); delete(root); } }

Cau truc D lieu - Cau truc cay

71

Cy nh phn tm kim
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).
72

Cau truc D lieu - Cau truc cay

You might also like