CÂY NHỊ PHÂN
TMT
1
CÁC KHÁI NI MỆ
1. C u trúc cây nh phânấ ị
2. Các lo i cây nh phânạ ị
a/ Cây nh phân đúngị (Strictly Binary
Tree): T t c các nút đ u có đúng hai con ấ ả ề
(ngo i tr nút lá). ạ ừ
2
B
A
C
X F
H I
D E
G
Y
B
A
C
X F
H I
D E
G
Y
CÁC KHÁI NI MỆ
b/ Cây nh phân đ yị ầ (Complete Binary
Tree): là cây nh phân đúng và t t c các ị ấ ả
nút lá cùng m c. ở ứ
3
B
A
C
F
G
N O
D
E
J
K
L
M
H I
B
A
C
F
G
N O
D
E
J
K
L
M
H I
Đ C ĐI M CÂ Y NH PHÂN TÌM KI MẶ Ể Ị Ế
Là cây nh phânị
Giá tr c a m t node ị ủ ộ
b t k luôn ấ ỳ l n h n ớ ơ
giá tr c a t t c các ị ủ ấ ả
node bên trái và nh ỏ
h n giá tr t t c các ơ ị ấ ả
node bên ph iả
Nút có giá tr nh ị ỏ
nh t n m trái nh t ấ ằ ở ấ
c a cây ủ
Nút có giá tr l n ị ớ
nh t n m ph i ấ ằ ở ả
nh t c a câyấ ủ
7
7
7
7
3
3
36
36
1
1
6
6
15
15
40
40
23
23
4
4
4
Cây nh phân cân b ngị ằ (AVL): M t cây ộ
nh phân đ c g i là cây nh phân cân b ng ị ượ ọ ị ằ
n u và ch n u đ i v i ế ỉ ế ố ớ m i nút c a cây thì ọ ủ
chi u caoề c a cây con bên trái và chi u ủ ề
cao c a cây con bê n ph i h n kém nhau ủ ả ơ
nhi u nh t là 1ề ấ (Theo Adelson - Velski và
Landis).
5
B
A
C
E
F
I J
D
G H
B
A
C
E
F
I J
D
G H
Cây nh phân cân b ng hoàn toànị ằ : M t ộ
cây nh phân đ c g i là cây nh phân cân ị ượ ọ ị
b ng hoàn toàn ằ n u và ch n u đ i v i ế ỉ ế ố ớ
m i nút c a cây thì ọ ủ s nútố c a cây con ủ
bên trái và s nút c a cây con bên ph i ố ủ ả
h n kém nhau nhi u nh t là 1ơ ề ấ
6
B
A
C
E F
I
E D
H
H
B
A
C
E F
I
E D
H
H
Nút
Đ NH NGHĨA KI U D LI UỊ Ể Ữ Ệ
typedef struct Node
{
<Data> Key;
struct Node *Left, *Right;
} *Tree;
Giá trị
Trỏ trái Trỏ phải
TNODE
Key
pLeft pRight
7
KHAI BÁO CÂY NH Ị
typedef struct Node
{
int Key;
struct Node *Left, *Right;
} *Tree;
8
XÂY D NG CÂY Ự
Ví dụ: có dãy s 20, 70, 30, 25, 35, 50, 80, 40, ố
60, 10
(3 tr ng h p g c là 50, g c là, 10 hay g c là ườ ợ ố ố ố
80)
9
Ví dụ: có dãy s 20, 70, 30, 25, 35, 50, 80, 40, ố
60, 10
10
Ví dụ: có dãy s 20, 70, 30, 25, 35, 50, 80, 40, ố
60, 10
11
DUY T CÂYỆ
Th t tr c ứ ự ướ (NLR)
Th t gi a ứ ự ữ (LNR)
Th t sau ứ ự (LRN)
……
12
NLR
7 L7 R7
7 3 L3 R3 36 L36 R36
7 3 1 6 L6 36 15 R15 40
7 3 1 6 4 36 15 23 40
7
7
7
7
3
3
36
36
1
1
6
6
15
15
40
40
23
23
4
4
13
NLR
T i node t đang xét, n u ạ ế
khác r ng thìỗ
. In giá tr c a tị ủ
. Duy t cây con bên trái ệ
c a t theo th t NLRủ ứ ự
. Duy t cây con bên ệ
ph i c a t theo th t ả ủ ứ ự
NLR
void NLR (TREE t)
void NLR (TREE t)
{
{
if(t!=NULL)
if(t!=NULL)
{
{
cout<<t->Key<<“\t”;
cout<<t->Key<<“\t”;
NLR(t->pLeft);
NLR(t->pLeft);
NLR(t->pRight);
NLR(t->pRight);
}
}
}
}
14
LNR
L7 7 R7
L3 3 R3 7 L36 36 R36
1 3 L6 6 7 15 R15 36 40
1 3 4 6 7 15 23 36 40
7
7
7
7
3
3
36
36
1
1
6
6
15
15
40
40
23
23
4
4
15
LNR
T i node t đang xét, n u ạ ế
khác r ng thìỗ
. Duy t cây con bên trái ệ
c a t theo th t LNRủ ứ ự
. In giá tr c a tị ủ
. Duy t cây con bên ph i ệ ả
c a t theo th t LNR ủ ứ ự
void LNR (TREE t)
{
if(t!=NULL)
{
LNR(t->pLeft);
cout<<t->Key<<“ “;
LNR(t->pRight);
}
}
16
LRN
L7 R7 7
L3 R3 3 L36 R36 36 7
1 L6 6 3 R15 15 40 36 7
1 4 6 3 23 15 40 36 7
7
7
7
7
3
3
36
36
1
1
6
6
15
15
40
40
23
23
4
4
17
LRN
T i node t đang xét, n u ạ ế
khác r ng thìỗ
. Duy t cây con bên trái ệ
c a t theo th t LRNủ ứ ự
. Duy t cây con bên ph i ệ ả
c a t theo th t LRN ủ ứ ự
. In giá tr c a t ị ủ
void LRN (TREE t)
{
if(t!=NULL)
{
LRN(t->pLeft);
LRN(t->pRight);
cout<<t->Key<<“ “;
}
}
18