You are on page 1of 30

CU TRC D LIU & GII THUT 1 CY (TREE)

Tree
Cy l mt tp hu hn cc node c cng kiu d liu, trong c 1 node c bit gi l node gc (root). Gia cc node c mt quan h phn cp gi l quan h cha con. nh ngha cy di dng quy: Mt node l 1 cy, node cng l gc (root) ca cy . Cy gm 1 node kt hp vi mt s cy con bn di.
2

Tree
Cy rng: Cy khng c bt k mt node no. Cc node c gi l cng 1 cy khi c ng i gia cc node ny. Mi node trong cy (tr node gc) c duy nht 1 node nm trn n, gi l node cha. Node con: Cc node nm ngay di 1 node. Node l: Cc node khng c con. Mc ca node: node gc c mc l 0. Nu node cha c mc l i th node con c mc l i+1. Chiu cao (su) ca cy: S mc ln nht ca node c trn cy.
3

Tree
su ca mt node: di ng i duy nht gia node gc v node . Mt node ti mc i c di l i. Bc ca node: S cc cy con ca 1 node. Node c bc = 0 gi l node l. Bc ca cy: Bc ln nht ca cc node trong cy. Cy c bc n gi l cy n-phn. Node nhnh: Node c bc khc 0 v khng phi l node gc. Cc node c cng cha gi l anh em. Tp cc cy con ring bit gi l rng. Mt cy c gi l c th t nu cc node con ca 1 node c b tr theo th t no , ngc li gi l cy khng c th t.
4

Tree
Mc 0 Mc 1 Mc 2 Mc 3 Mc 4 Node l root Node cha Node Node con

V d: Cy mc lc ca 1 quyn sch
Sch

C1

C2

C3

1.1

1.2

2.1

2.3

2.2

3.1

3.2

3.1.1

3.1.2

3.1.3

Cy nh phn
Cy nh phn l cy rng hoc l cy m mi node c ti a 2 node con.

Biu din cy nh phn


S dng danh sch lin kt struct node { int data; node *left, *right; }; typedef node * Pnode; khai bo bin cho 1 cy, khai bo bin con tr v cho con tr ny ch vo phn t gc. V d: Pnode tree;
8

Mt s thao tc trn cy nh phn


Khi to cy rng tree = NULL; Duyt cy
Duyt tin t (NLR): duyt nt gc, duyt tin t con tri ri duyt tin t con phi. Duyt trung t (LNR): duyt trung t con tri, duyt nt gc, ri duyt trung t con phi. Duyt hu t (LRN): duyt hu t con tri, duyt hu t con phi, sau duyt nt gc.

Duyt tin t
Nu cy rng => khng lm g. Nu cy khc rng:
Thm node gc. Duyt cy con bn tri. Duyt cy con bn phi.

Hm: void duyet_NLR (Pnode tree) { if (tree!=NULL) { <duyt node gc>; duyet_NLR(tree->left); duyet_NLR(tree->right); } }
10

Duyt trung t
Nu cy rng => khng lm g. Nu cy khc rng:
Duyt cy con bn tri. Thm node gc. Duyt cy con bn phi.

Hm: void duyet_LNR (Pnode tree) { if (tree!=NULL) { duyet_LNR(tree->left); <duyt node gc>; duyet_LNR(tree->right); } }
11

Duyt hu t
Nu cy rng => khng lm g. Nu cy khc rng:
Duyt cy con bn tri. Duyt cy con bn phi. Thm node gc.

Hm: void duyet_LRN (Pnode tree) { if (tree!=NULL) { duyet_LRN (tree->left); duyet_LRN (tree->right); <duyt node gc>; } }
12

Duyt cy
A B C

Duyt tin t: A -> B -> D -> E -> C -> F -> G Duyt trung t: D -> B -> E -> A -> F -> C -> G Duyt hu t: D -> E -> B -> F -> G -> C -> A

13

Tm node c ni dung l x trn cy nh phn


Nu node gc c ni dung l x => node gc chnh l node cn tm. Nu node gc = NULL => khng c. Nu ni dung node gc khc x v node gc khc NULL:
Tm node theo nhnh cy con bn tri. Tm node theo nhnh cy con bn phi.

14

Tm kim
Pnode search (Pnode tree, int x) { Pnode p; if (tree->data == x) return tree; if (tree == NULL) return NULL; p = search(tree->left, x); if (p == NULL) search(tree->right, x); }
15

Cy nh phn tm kim
Cy nh phn tm kim (Binay Search Tree) l mt cy nh phn m ti mi node:
Phn t node ln hn cc phn t cy con bn tri. Nh hn cc phn t cy con bn phi.

Ci t cy nh phn tm kim: S dng danh sch lin kt. struct node { int data; node *left, *right; }; typedef node * Pnode;
16

Tm kim 1 node trn cy NPTK


tm kim 1 node c gi tr x trn cy NPTK, so snh gi tr ca node gc vi x:
Nu node gc = NULL khng c x trn cy. Ngc li, nu x bng gi tr node gc dng, tm c node cha x. Nu x > gi tr node gc tm x trn cy con bn phi. Nu x < gi tr node gc tm x trn cy con bn tri.

17

Tm kim 1 node trn cy NPTK


Pnode search (Pnode tree,int x) { if(tree==NULL) return NULL; if(tree->data==x) return tree; if(x<tree->data) search(tree->left,x); else search(tree->right,x); }
18

V d
Tm node c gi tr 32 trong cy hnh bn. So snh 32 vi node gc l 20, do 32>20 tm tip trn cy con bn phi l cy c node gc l 35. So snh 32 vi node gc l 35, do 32<35 tm tip trn cy con bn tri l cy c node gc 32. So snh 32 vi node gc l 32, 32=32 dng, tm c node cha gi tr cn tm.
20

15

35

10

18

32

44

13

27

19

Thm 1 node vo cy NPTK


Thut ton thm 1 node c gi tr x vo cy NPTK:
Nu node gc = NULL: x cha c trn cy thm node mi cha x. Nu x trng vi node gc khng th thm. Nu x < node gc thm x cy con bn tri. Nu x > node gc thm x cy con bn phi.

20

Thm 1 node vo cy NPTK


void insert (Pnode &tree, int x) { if(tree==NULL) { tree=new node; tree->data=x; tree->left=tree->right=NULL; return; } if(x==tree->data) return; else if(x < tree->data) insert (tree->left,x); else insert (tree->right,x); }

21

V d
Thm 1 node c gi tr 33 vo cy. So snh 33 vi node gc l 20, do 33>20 xt tip cy con bn phi l cy c node gc 35. So snh 33 vi node gc l 35, do 33<35 xt tip cy con bn tri l cy c node gc 32. So snh 33 vi node gc l 32, 33>32 xt tip cy con bn phi. V node con bn phi = NULL, thm node mi cha 33 vo bn phi node cha gi tr 32.
20

15

35

10

18

32

44

13

27

22

Xa 1 phn t x trn cy NPTK


Khi xa 1 node, cn phi iu chnh li cy n vn l cy nh phn tm kim. Cc trng hp khi xa: Xa node c gi tr 35 l node l.
20 20

15

35

15

NULL

23

Xa 1 phn t x trn cy NPTK


Xa node c gi tr 15 l node trung gian c 1 node con. 20 20
15 35 18 35

18

Xa node c gi tr 20 l node trung gian c 2 node con. 20 32


15 35 15 35

18

32

44

18

44

24

Thut ton xa 1 node


Nu khng tm thy node cha gi tr x dng. Nu gp node p cha x:
TH1: Nu p l node l hy node p. TH2: Nu p ch c 1 node con cho tree ch n node con, hy p. TH3: Nu p c 2 node con, tm node nh nht cy con bn phi (hoc node ln nht cy con bn tri), thay th gi tr ti node p bng gi tr ca node nh nht cy con bn phi, sau xa node nh nht.
25

Xa 1 phn t x trn cy NPTK


void deletenode (Pnode &tree,int x) { Pnode p,f; p=tree; if(tree==NULL) return; if(x < tree->data) deletenode(tree->left,x); else if(x > tree->data) deletenode(tree->right,x); else if(tree->left==NULL && tree->right ==NULL) { delete tree; tree=NULL; } else if(tree->left==NULL) { tree=tree->right; delete p; } else if(tree->right==NULL) { tree=tree->left; delete p; } else { p=min(tree->right); f=parent(tree,p); tree->data=p->data; if(f!=NULL) { if(f->left==p) f->left=NULL; else if(f->right==p) f->right=p->right; delete p; } } }
26

Xa 1 phn t x trn cy NPTK


Pnode min (Pnode tree) { if(tree->left==NULL) return tree; return min(tree->left); } Pnode parent (Pnode tree, Pnode p) { if(tree==NULL || tree==p) return NULL; if(tree->left==p||tree->right==p) return tree; if(p->data > tree->data) return parent(tree->right,p); else return parent(tree->left,p); }

27

Bi tp
1. Vit chng trnh thc hin cc thao tc trn cy nh phn tm kim:
a. b. c. d. e. f. g. h. i. Thm phn t. Tm kim phn t. Hy b phn t. Duyt cy theo NLR, LNR, LRN. m s node l trn cy. Tnh chiu cao ca cy. m s node c: bc 1, bc 2. Tm node con bn tri, bn phi ca 1 node. Tnh tng cc phn t trn cy.
28

Bi tp
2. Hy v cy nh phn tm kim cho cc gi tr sau: paper, hero, talent, green, paint, time, potato, hello, tomato, talkative, empty, storage. Q 3. Hy v cy nh phn tm kim cho dy s: 40, 25, 74, 57, 65, 80, 16, 20, 43, 22, 36, 78. 4. Cho bit th t duyt LNR, NLR, LRN, RNL, NRL, RLN ca cy hnh bn:
A

29

Bi tp
5. Mt sinh vin c cc thng tin: m s, h tn, nm sinh, im trung bnh. Vit chng trnh to cy nh phn tm kim kiu sinh vin, sinh vin nhp u tin lm node gc, da vo m s sinh vin lu vo cy con bn tri hoc cy con bn phi ca cy nh phn tm kim, vit mt s thao tc sau:
a. b. c. d. e. Thm 1 sinh vin. Tm kim sinh vin theo m s. Hy b sinh vin theo m s. Xut danh sch sinh vin. m s sinh vin c im trung bnh >=5.
30

You might also like