Ch
ng 4
CÂY
N i dung
4.1.
nh ngh a và các khái ni m
4.2. Cây nh phân
4.3. Các
1/28/2013
ng d ng
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
2
4.1.
nh ngh a và khái ni m
4.1.1. nh ngh a
4.1.2. Các thu t ng
4.1.3. Cây có th t
4.1.4. Cây có nhãn
4.1.5. ADT cây
1/28/2013
C U TRÚC D
NGUY N
4.1.1.
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
3
nh ngh a cây
Cây bao g m các nút, có m t nút đ c bi t đ c g i là g c (root) và
các c nh n i các nút. Cây đ c đ nh ngh a đ qui nh sau:
nh ngh a cây:
Basic Step: M t nút r là cây và r đ c g i là g c c a cây này.
Recursive Step: Gi s T1,T2,...,Tk là các cây v i g c là r1,r2,...,rk.
Ta có th xây d ng cây m i b ng cách đ t r làm cha (parent) c a
các nút r1,r2,..., rk . Trong cây này r là g c và T1, T2, . . . , Tk là các
cây con c a g c r. Các nút r1, r2, . . . , rk đ c g i là con (children)
c a nút r.
Chú ý: Nhi u khi đ phù h p ta c n đ nh ngh a cây r ng (null
tree) là cây không có nút nào c .
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
4
C u trúc đ qui c a cây
r
r2
r1
1/28/2013
Tk
T2
T1
C U TRÚC D
NGUY N
rk
LI U VÀ THU T TOÁN
Cây trong th c t
•
•
•
•
•
•
•
•
5
C NGH A - B môn KHMT
ng d ng
Bi u đ l ch thi đ u
Cây gia ph
Bi u đ phân c p qu n lý hành chính.
Cây th m c
C u trúc c a m t quy n sách
Cây bi u th c
Cây phân ho ch t p h p
...
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
6
Cây l ch thi đ u
Trong i th ng cây r t hay
c s d ng
di n t
l ch thi u c a các gi i th thao theo th th c u lo i
tr c ti p, ch ng h n vòng 2 c a World Cub
Pháp
Tây ban nha
Brazin
Anh
c
Ucrain
Italia
Ahentina
Pháp
Brazin
Italia
c
Italia
C U TRÚC D
1/28/2013
Pháp
NGUY N
Italia
LI U VÀ THU T TOÁN
7
C NGH A - B môn KHMT
Cây gia ph
Cây gia ph c a các nhà toán dòng h Bernoulli
Nikolaus
1623-1708
Johan I
1667-1748
Nikolaus II
1695-1726
Daniel
1700-1782
Nikolaus
1662-1716
Johan II
1710-1790
Johan III
1746-1807
1/28/2013
Jacob I
1654-1705
Nikolaus I
1687-1759
Jacob II
1759-1789
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
8
Cây phân c p qu n lý hành chính
Ban Giám đ c
Phòng
Hành chính
TP
Phòng
T ch c
Phòng
Tài v
Phòng
Kinh doanh
Phòng
K ho ch
V n th
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
Cây th
1/28/2013
C U TRÚC D
NGUY N
9
m c
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
10
Cây m c l c sách
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
11
C NGH A - B môn KHMT
Cây gia ph ng
c (Ancestor Tree)
Cây ph h ng c: m i ng i u có b m . Cây
này là cây nh phân (binary tree).
Thùy H
ng
Quang D ng
Thúy C i
Bích Liên
1/28/2013
Trung Kiên
C U TRÚC D
NGUY N
Hoàng Cúc
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
Quang Thái
12
Cây bi u th c (Expression Tree)
+
/
/
1
3
*
6
1/3 +
C U TRÚC D
1/28/2013
NGUY N
4
7
6*7 / 4
LI U VÀ THU T TOÁN
13
C NGH A - B môn KHMT
Cây phân ho ch t p h p
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
T p con các s l :
T p con các s ch n:
{1, 3, 5, 7, 9}
{ 2, 4, 6, 8, 10}
{1, 9}
T p con các s nguyên t :
{ 2, 4, 8, 10}
{ 3, 5, 7 }
1/28/2013
C U TRÚC D
NGUY N
T p con s hoàn h o:
{6}
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
14
4.1.
nh ngh a và khái ni m
4.1.1. nh ngh a
4.1.2. Các thu t ng
4.1.3. Cây có th t
4.1.4. Cây có nhãn
4.1.5. ADT cây
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
4.1.2. Các thu t ng
•
•
•
•
•
•
•
•
•
•
•
15
C NGH A - B môn KHMT
chính
Nút - node
G c - root
Lá - leaf
Con - child
Cha - parent
T tiên - ancestors
H u du - descendants
Anh em - sibling
Nút trong - internal node
Chi u cao - hight
Chi u sâu - depth
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
16
Các thu t ng
chính
•
N u n1, n2, . . . , nk là dãy nút trên cây sao cho ni là cha c a ni+1 v i 1 i < k, thì dãy
này đ c g i là đ ng đi (path) t nút n1 t i nút nk.
dài (length) c a đ ng đi là
b ng s l ng nút trên đ ng đi tr b t 1. Nh v y đ ng đi đ dài 0 là đ ng đi t
m t nút đ n chính nó.
•
N u có đ ng đi t nút a t i nút b, thì a đ
đ c g i là h u du (descendant) c a a.
•
T tiên (h u du ) c a m t nút khác v i chính nó đ c g i là t tiên (h u du ) chính
th ng (proper). Trong cây, g c là nút không có t tiên chính th ng và m i nút khác
trên cây đ u là h u du chính th ng c a nó.
•
M t nút không có h u du chính th
•
Các nút có cùng cha đ
•
Cây con (subtree) c a m t cây là m t nút cùng v i t t c các h u du c a nó.
•
Chi u cao (height) c a nút trên cây là b ng đ dài c a đ ng đi dài nh t t nút đó
đ n lá c ng 1. Chi u cao c a cây (height of a tree) là chi u cao c a g c.
sâu/m c
(depth/level) c a nút là b ng 1 c ng v i đ dài c a đ ng đi duy nh t t g c đ n nó.
c g i lá lá (leaf).
c g i là anh em (sibling).
C U TRÚC D
1/28/2013
ng đ
c g i là t tiên (ancestor) c a b, còn b
NGUY N
LI U VÀ THU T TOÁN
17
C NGH A - B môn KHMT
Thu t ng
nút
nodes
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
1/28/2013
18
Thu t ng
Nút cha
parent node
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
1/28/2013
C NGH A - B môn KHMT
19
Thu t ng
cha
con
parent
child
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
1/28/2013
20
Thu t ng
con
cha
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
1/28/2013
C NGH A - B môn KHMT
21
Thu t ng
g c - root
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
lá - leaf
1/28/2013
22
Thu t ng
cây con - subtree
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
1/28/2013
23
1/28/2013
24
Thu t ng
cây con
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
Thu t ng
cây con
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
25
1/28/2013
C NGH A - B môn KHMT
Các thu t ng
v i cây có g c
root, ancestor
a
parent
d
b
nút
c
sibling
e
f
g
child
leaf (không có con)
h
child
j
i
descendent
1/28/2013
internal node
(không là lá)
C U TRÚC D
NGUY N
k
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
e, i, k, g, h
là lá (leaves)
26
ng đi trên cây
T cha đ n con và đ n
các nút h u du .
Có duy nh t 1 đ ng đi t
m t nút đ n m t nút là
h u du c a nó.
a
b
d
c
Path 1
Path 2
f
e
h
g
Path 1: { a, b, f, j }
Path 2: { d, i }
j
C U TRÚC D
1/28/2013
NGUY N
i
LI U VÀ THU T TOÁN
27
C NGH A - B môn KHMT
cao (height) và đ sâu/m c (depth/level)
đ cao h = 5
đ cao = 4
3
đ cao = 3
h=2
đ cao h=1
1/28/2013
8
6
10
12
1
cao c a cây là 5
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
đ sâu 2
4
11
5
9
đ sâu 1
7
2
đ sâu 3
đ sâu 4
đ sâu 5
28
How We View a Tree
Nature Lovers View
C U TRÚC D
NGUY N
Computer Scientists View
LI U VÀ THU T TOÁN
29
1/28/2013
C NGH A - B môn KHMT
B c (Degree)
S l ng con c a nút
x đ c g i là
b c (degree) c a x.
7
3
4
11
2
degree = 0
1
5
9
1/28/2013
10
12 degree = 1
8
6
degree = 3
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
30
4.1.
nh ngh a và khái ni m
4.1.1. nh ngh a
4.1.2. Các thu t ng
4.1.3. Cây có th t
4.1.4. Cây có nhãn
4.1.5. ADT cây
C U TRÚC D
1/28/2013
NGUY N
LI U VÀ THU T TOÁN
31
C NGH A - B môn KHMT
4.1.3. Cây có th
t
- Ordered Tree
• Th t c a các nút
• Các con c a m t nút th ng đ c x p th t t trái sang ph i. Nh
v y hai cây trong hình sau đây là khác nhau, b i vì hai con c a nút
a xu t hi n trong hai cây theo th t khác nhau:
a
b
a
c
c
b
• Cây v i các nút đ c x p th t đ c g i là cây có th t . Ta s xét
ch y u là cây có th t . Vì v y, ti p theo thu t ng cây là đ ch
cây có th t . Khi mu n kh ng đ nh là không quan tâm đ n th t ,
ta s ph i nói rõ là cây không có th t .
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
32
X p th
t
các nút
• Ta có th x p th t các nút c a cây theo nhi u cách. Có ba
th t quan tr ng nh t, đó là Th t tr c, Th t sau và
Th t gi a (Preorder, Postorder, và Inorder)
• Các th t này đ
c đ nh ngh a m t cách đ qui nh sau
– N u cây T là r ng, thì danh sách r ng là danh sách theo th
t tr c, th t sau và th t gi a c a cây T.
– N u cây T có m t nút, thì nút đó chính là danh sách theo
th t tr c, th t sau và th t gi a c a cây T.
– Trái l i, gi s T là cây có g c r v i các cây con là T1, T2,...,
Tk.
C U TRÚC D
1/28/2013
NGUY N
Duy t theo th
LI U VÀ THU T TOÁN
33
C NGH A - B môn KHMT
t tr
c - Preorder Traversal
r
r2
r1
T1
T2
rk
Tk
• Th t tr c (hay duy t theo th
traversal) c a các nút c a T là:
–
–
–
–
–
1/28/2013
G c r c a T,
ti p đ n là các nút c a T1 theo th t tr c,
ti p đ n là các nút c a T2 theo th t tr c,
...
và cu i cùng là các nút c a Tk theo th t tr
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
t
tr
c - preorder
c.
34
Duy t theo th
t sau - Postorder Traversal
r
r2
r1
Tk
T2
T1
rk
• Th t sau c a các nút c a cây T là:
–
–
–
–
–
Các nút c a T1 theo th t sau,
ti p đ n là các nút c a T2 theo th t sau,
...
các nút c a Tk theo th t sau,
sau cùng là nút g c r.
C U TRÚC D
1/28/2013
NGUY N
Duy t theo th
LI U VÀ THU T TOÁN
35
C NGH A - B môn KHMT
t gi a - Inorder Traversal
r
r2
r1
T1
T2
rk
Tk
• Th t gi a c a các nút c a cây T là:
– Các nút c a T1 theo th t gi a,
– ti p đ n là nút g c r,
– ti p theo là các nút c a T2, . . . , Tk, m i nhóm nút đ
gi a.
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
c x p theo th t
36
Thu t toán duy t theo th t
tr
c - Preorder Traversal
void PREORDER ( nodeT r )
{
(1)
a ra r;
(2) for (m i con c c a r, n u có, theo th t t trái sang) do
PREORDER(c);
a
}
b
c
d
e
g
f
h
i
j
• Ví d : Th t tr c c a các đ nh c a cây trên hình v là
a, b, c, e, h, i, f, j, d, g
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
Thu t toán duy t theo th
•
37
C NGH A - B môn KHMT
t
sau - Postorder Traversal
Thu t toán duy t theo th t sau thu đ
tác (1) và (2) trong PREORDER:
c b ng cách đ o ng
c hai thao
void POSTORDER ( nodeT r )
{
for (m i con c c a r, n u có, theo th t t trái sang) do
POSTORDER(c)
a
a ra r;
}
c
b
e
h
•
d
f
i
g
j
Ví d : Dãy các đ nh đ c li t kê theo th t sau c a cây trong hình v là:
b, h, i, e, j, f, c, g, d, a
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
38
Thu t toán duy t theo th t gi a - Inorder Traversal
a
void INORDER (nodeT r )
{
if ( r là lá )
a ra r;
b
c
else
e
f
{
INORDER(con trái nh t c a r);
h
i
j
a ra r;
for (m i con c c a r, ngo i tr con trái nh t, theo th t t trái sang) do
INORDER(c);
}
}
•
Ví d : Dãy các đ nh c a cây trong hình v đ
b, a, h, e, i, c, j, f, g, d
1/28/2013
C U TRÚC D
NGUY N
X p th
•
g
c li t kê theo th t gi a:
LI U VÀ THU T TOÁN
39
C NGH A - B môn KHMT
t
d
các nút
nh cách đ a ra các nút theo ba th t
v a trình bày hãy hình dung là ta đi vòng
quanh bên ngoài cây b t đ u t g c, ng c
chi u kim đ ng h và sát theo cây nh t.
Ch ng h n, đ ng đi đó đ i v i cây trong
các ví d đã xét trên là nh sau:
a
b
c
e
h
d
f
i
g
j
i v i th t tr c, ta đ a ra nút m i khi đi qua nó.
i v i th t sau, ta đ a ra nút khi qua nó l n cu i tr c khi
quay v cha c a nó.
•
i v i th t gi a, ta đ a ra lá ngay khi đi qua nó, còn nh ng nút
trong đ c đ a ra khi l n th hai đ c đi qua.
• Chú ý r ng các lá đ c x p th t t trái sang ph i nh nhau trong c
ba cách s p x p.
•
•
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
40
4.1.4. Cây có nhãn (Labeled Tree)
• Thông th ng ng i ta gán cho m i nút c a cây m t nhãn (label)
ho c m t giá tr , c ng t ng t nh chúng ta đã gán m i nút c a
danh sách v i m t ph n t . Ngh a là, nhãn c a nút không ph i là tên
g i c a nút mà là giá tr đ c c t gi trong nó. Trong m t s ng
d ng ta có th thay đ i nhãn c a nút mà tên c a nó v n đ c gi
nguyên.
• Ví d : Xét cây có 7 nút n1, ..., n7. Ta gán nhãn cho các nút nh sau:
–
–
–
–
–
–
–
Nút n1 có nhãn *;
Nút n2 có nhãn +;
Nút n3 có nhãn -;
Nút n4 có nhãn a;
Nút n5 có nhãn b;
Nút n6 có nhãn a;
Nút n7 có nhãn c.
n1
n3
n2 +
n4
C U TRÚC D
1/28/2013
*
NGUY N
n5 b
a
n6
-
a
n7
c
LI U VÀ THU T TOÁN
41
C NGH A - B môn KHMT
Cây bi u th c (Expression Tree)
• Cây trong ví d v a nêu có tên g i là cây bi u th c
(a+b)*(a-c)
• Qui t c đ cây có nhãn bi u di n m t bi u th c là:
– M i nút lá có nhãn là toán h ng và ch g m m t toán h ng đó. Ví d nút n4 bi u
di n bi u th c a.
– M i nút trong n đ c gán nhãn là phép toán. Gi s n có nhãn là phép toán hai
ngôi q, nh + ho c *, và con trái bi u di n bi u th c E1 và con ph i bi u di n
bi u th c E2. Khi đó n bi u di n bi u th c (E1) q (E2). Ta có th b d u ngo c
n u nh đi u đó là không c n thi t.
n1
• Ví d :
– Nút n2 ch a toán h ng + và con trái
và con ph i c a nó là a và b. Vì th
n2 bi u di n (a) + (b), hay a+b.
C U TRÚC D
NGUY N
n3
n2 +
n4
1/28/2013
*
a
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
n5 b
n6
a
-
n7
c
42
4.1.
nh ngh a và khái ni m
4.1.1. nh ngh a
4.1.2. Các thu t ng
4.1.3. Cây có th t
4.1.4. Cây có nhãn
4.1.5. ADT cây
C U TRÚC D
1/28/2013
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
43
4.1.5. ADT Cây
• Trong ch
ng này chúng ta tìm hi u cây v a nh là ki u d
li u tr u t
ng v a nh là ki u d li u. M t trong nh ng ng
d ng quan tr ng c a cây là nó đ
nhi u ki u d li u tr u t
c dùng đ thi t k và cài đ t
ng quan tr ng khác nh "Cây tìm
ki m nh phân", "T p h p",....
• C ng nh danh sách, đ i v i cây c ng có th xét r t nhi u
phép toán làm vi c v i nó. D
i đây ta ch k ra m t s phép
toán c b n.
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
44
4.1.5. ADT Cây
• parent(n, T). Hàm này tr l i cha c a nút n trong cây T. N u
n là g c (nó không có cha), tr l i . Theo ngh a này, là nút
r ng ("null node") dùng đ báo hi u r ng chúng ta s d i kh i
cây.
• leftmost_child(n, T) tr l i con trái nh t c a nút n trong cây T,
và tr l i n u n là lá (không có con).
• right_sibling(n, T) tr l i em bên ph i c a nút n trong cây T
(đ c đ nh ngh a nh là nút m có cùng cha là p gi ng nh n
sao cho m n m sát bên ph i c a n trong danh sách s p th t
các con c a p.
– Ví d , v i cây trong slide g n nh t:
• leftmost_child(n2) = n4;
• right_sibling(n4) = n5, và RIGHT_SIBLING (n5) = L.
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
45
4.1.5. ADT Cây
• label(n, T) tr l i nhãn c a nút n trong cây T. Tuy nhiên, ta
không đòi h i cây nào c ng có nhãn.
• createi(v, T1, T2, . . . , Ti) là h các hàm, m i hàm cho m t giá
tr c a i = 0, 1, 2, ... createi t o m t nút m i r v i nhãn v và
g n cho nó i con, v i các con là các g c c a cây T1, T2, ..., Ti,
theo th t t trái sang. Tr l i cây v i g c r. Chú ý, n u i = 0,
thì r v a là lá v a là g c.
• root(T) tr l i nút là g c c a cây T, ho c n u T là cây r ng.
• makenull(T) bi n T thành cây r ng.
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
46
Bi u di n cây
• Có nhi u cách bi u di n cây. Ta gi i thi u qua v ba cách bi u
di n c b n:
– dùng m ng (Array Representation)
– danh sách các con (Lists of Children)
– dùng con trái và em ph i (The Leftmost-Child, RightSibling Representation)
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
47
Bi u di n cây dùng m ng
• Gi s T là cây v i các nút đ t tên là 1, 2, . . . , n. Cách đ n gi n đ
bi u di n T là h tr thao tác parent b i danh sách tuy n tính A
trong đó m i ph n t A[i] ch a con tr đ n cha c a nút i. Riêng g c
c a T có th phân bi t b i con tr r ng.
• Khi dùng m ng, ta đ t A[i] = j n u nút j là cha c a nút i, và A[i] = 0
n u nút i là g c.
• Cách bi u di n này d a trên c s là m i nút c a cây (ngo i tr g c)
đ u có duy nh t m t cha. V i cách bi u di n này cha c a m t nút có
th xác đ nh trong th i gian h ng s .
ng đi t m t nút đ n t
tiên c a chúng (k c đ n g c) có th xác đ nh d dàng:
n <- parent(n) <- parent(parent(n)) <- ...
• Ta c ng có th đ a thêm vào m ng L[i] đ h tr vi c ghi nh n nhãn
cho các nút, ho c bi n m i ph n t A[i] thành b n ghi g m hai
tr ng: bi n nguyên ghi nh n cha và nhãn.
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
48
Bi u di n cây dùng m ng
•
Ví d
1
3
2
5
4
6
7
A
•
0
1
1
2
10
8
2
9
3
6
6
6
3
H n ch : Cách dùng con tr cha không thích h p cho các thao tác v i con. Cho nút
n, ta s m t nhi u th i gian đ xác đ nh các con c a n, ho c chi u cao c a n. H n
n a bi u di n b i con tr cha không cho ta th t c a các nút con. Vì th các phép
toán nh leftmost_child và right_sibling là không xác đ nh đ c. Do đó cách bi u
di n này ch dùng trong m t s tr ng h p nh t đ nh.
C U TRÚC D
1/28/2013
NGUY N
LI U VÀ THU T TOÁN
49
C NGH A - B môn KHMT
Danh sách các con (Lists of Children)
• Trong cách bi u di n này, v i m i nút c a cây ta c t gi m t
danh sách các con c a nó.
• Danh sách con có th bi u di n b i m t trong nh ng cách bi u
di n danh sách đã trình bày trong ch
• Tuy nhiên, đ ý r ng s l
ng tr
c.
ng con c a các nút là r t khác
nhau, nên danh sách móc n i th
ng là l a ch n thích h p
nh t.
1/28/2013
C U TRÚC D
NGUY N
LI U VÀ THU T TOÁN
C NGH A - B môn KHMT
50