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

A

B
C
D
F
G
E
H
K
CU TRC D LIU V
GII THUT
Cy nh phn
2
nh ngha
Cy nh phn
Cy rng
Hoc c mt node gi l gc (root) v 2 cy con gi
l cy con tri v cy con phi
V d:
Cy rng:
Cy c 1 node: l node gc
Cy c 2 node:
3
Cc tnh cht khc
Cy nh phn y :cc node l lun nm
mc cao nht v cc nt khng l nt l c y
2 nhnh con.
Chiu cao ca cy c n node:
Trung bnh h = [lg n] + 1
y h = lg (n + 1)
Suy bin h = n
S phn t ti mc i nhiu nht l 2
i-1
4
Php duyt cy
Duyt qua tng node ca cy (mi node 1 ln)
Cch duyt:
NLR: Duyt qua theo th t u.
LNR: Duyt qua theo th t gia.
LRN: Duyt qua theo th t cui.
5
V d v php duyt cy NLR
A
B
D
H I
N
E
J K
O
C
F
L
P
G
M
A Kt qu: B D H I N E J O K C F L P G M
6
V d v php duyt cy LNR
A
B
D
H I
N
E
J K
O
C
F
L
P
G
M
H Kt qu: D N I B J O E K A F P L C M G
7
V d v php duyt cy LRN
A
B
D
H I
N
E
J K
O
C
F
L
P
G
M
H Kt qu: N I D O J K E B P L F M G C A
8
Khai bo kiu d liu
struct Node{
DataType Data;
Node *Left,*Right;
};
typedef Node *TreePtr;
9
Thit k cc php duyt cy
//Duyt bng phng php quy
void LNR(TreePtr Root)
{ if(Root != NULL)
{
LNR(Root->Left);
cout<<Root->Data<<" ";
LNR(Root->Right);
}
}
10
Thit k cc php duyt cy(2)
//Duyt bng phng php quy
void NLR(TreePtr Root)
{
if(Root!=NULL)
{
cout<<Root->Data<<" ";
NLR(Root->Left);
NLR(Root->Right);
}
}
11
Thit k cc php duyt cy(3)
//Duyt bng phng php quy
void LRN(TreePtr Root)
{
if(Root != NULL)
{
LRN(Root->Left);
LRN(Root->Right);
cout<<Root->Data<<" ";
}
}
12
Cy nh phn tm kim Binary
search tree (BST)
Mt cy nh phn tm kim (BST) l mt cy nh
phn rng hoc mi node ca cy ny c cc
c tnh sau:
1. Kha ca node gc ln (hay nh) hn kha ca
tt c cc node ca cy con bn tri (hay bn phi)
2. Cc cy con (bn tri, phi) l BST
Tnh cht:
Ch cn c tnh 1 l
Duyt LNR s c danh sch c th t
13
V d BST
25
10
3
1 6
5
18
12 20
13
37
29
35
32
50
41
Duyt LNR: 1 3 5 6 10 12 13 18 20 25 29 32 35 37 41 50
14
Cc tnh cht khc ca BST
Node cc tri (hay phi):
Xut pht t node gc
i sang tri (hay phi) n khi khng i c na
Kha ca node cc tri (hay phi) l nh nht
(hay ln nht) trong BST
BST l cy nh phn c tnh cht:
Kha ca node gc ln (hay nh) hn kha ca
node cc tri (hay cc phi)
15
Tm kim trn BST
Chn hng tm theo tnh cht ca BST:
So snh vi node gc, nu ng th tm thy
Tm bn nhnh tri (hay phi) nu kha cn tm nh
hn (hay ln hn) kha ca node gc
Ging phng php tm kim nh phn
Thi gian tm kim
Tt nht v trung bnh: O(lg n)
T nht: O(n)
16
V d tm kim trn BST
25
10
3
1 6
5
18
12 20
13
37
29
35
32
50
41
Tm kim 13
Khc nhau
Ging nhau Node gc nh hn Node gc ln hn
Tm thy
S node duyt: 5
S ln so snh: 9
17
V d tm kim trn BST
25
10
3
1 6
5
18
12 20
13
37
29
35
32
50
41
Tm kim 14
Khc nhau
Node gc nh hn Node gc ln hn
Khng tm thy
S node duyt: 5
S ln so snh: 10
18
Ci t tm kim trn BST
//Tm kim mt phn t x trn cy BST
//Thut ton tm kim dng quy
// Nu tm thy tr v 1, ngc li tr v 0
int BST_Search(TreePtr Root, DataType x)
{
if(Root!=NULL)
{
if(Root->Data==x) return 1;
else
{
if(Root->Data>x)
return BST_Search(Root->Left,x);
else
return BST_Search(Root->Right,x);
}
}
else return 0;
}
19
M C tm kim trn BST
(khng qui)
int BST_Search(TreePtr Root, DataType x)
{
NodePtr temp=Root;
while (temp!=NULL)
{
if(temp->Data==x) return 1;
else
{
if(temp->Data>x)
temp=temp->Left;
else
temp=temp->Right;
}
}
return 0;
}
20
Thm vo BST
21
Gii thut thm vo BST
Algorithm BST_insert
Input: subroot l node gc v new_data l d liu cn thm vo
Output: BST sau khi thm vo
1. if (cy rng)
1.1. Thm vo ti v tr ny
2. if (target trng kha vi subroot)
2.1. returnduplicate_error
3. if (new_data c kha nh hn kha ca subroot)
3.1. Thm vo bn nhnh tri ca subroot
4. else
4.1. Thm vo bn nhnh phi ca subroot
End BST_insert
22
M C thm vo BST( quy)
int BST_Insert(TreePtr &Root, DataType x)
{
if (Root == NULL)
{
Root = new Node;
Root->Data=x;
Root->Left=Root->Right=NULL;
return 1;
}
else if (x< Root->Data)
return BST_Insert(Root->Left, x);
else if (x> Root->data)
return BST_Insert(Root->Right, x);
else return 0;
}
23
Xa mt node l khi BST
1. Xa node ny
2. Gn lin kt t cha ca n
thnh rng
24
Xa mt node ch c mt con
1. Gn lin kt t cha ca n
xung con duy nht ca n
2. Xa node ny
u
x
v
u
v
A. ng dn n cc node ca
cy con v c dng:
u x v
B. Khng cn node no trong cy
c ng dn c dng nh vy.
C. Sau khi xa node x, ng
dn n cc node ca cy con v
c dng:
u v
D. ng dn ca cc node khc
trong cy khng i.
E. Trc , cc node ca cy
con v nm trong nhnh con ca x
l bn tri (bn phi) ca u v by
gi cng nm bn tri (bn phi)
ca u nn vn tha mn BST
25
Xa mt node c 2 nhnh con
A. ng dn n cc node ca cy con v v z c
dng:
u x v
u x z
B. Nu xa node x th ng dn n cc node ca
cy con v v z c dng:
u v
u z
D. iu ny ch xy ra khi cy con u v v nm v 2
pha ca u => khng cn l BST.
E. Gii php l thay gi tr x bng gi tr w thuc cy
ny sao cho:
w ln hn tt c kha ca cc node ca cy con v
w nh hn tt c kha ca cc node ca cy con z
26
Xa mt node c 2 nhnh con (tt.)
1. Tm w chnh l node cc tri ca cy con bn phi ca x
2. Thay x bng w
3. Xa node w c (ging trng hp 1 hoc 2 xt)
27
M C xa mt node
int Delete_BST(TreePtr &Root, DataType Item)
{ TreePtr x, Parent, xSucc, SubTree;
if(x=TimBST(Root,Item,Parent))==NULL) return 0;
else
{ if((x->Left!=NULL)&&(x->Right!=NULL))
{ xSucc=x->Right;
Parent=x;
while(xSucc->Left!=NULL)
{ Parent=xSucc;
xSucc=xSucc->Left;
}
x->Data=xSucc->Data;x=xSucc;
}
}
SubTree=x->Left;
if(SubTree==NULL) SubTree=x->Right;
if(Parent==NULL) Root=SubTree;
else if(Parent->Left==x) Parent->Left=SubTree;
else Parent->Right=SubTree;
delete x; return 1;
}

You might also like