[r]
(1)CH
ƯƠ
NG 1: CÂY (TREE)
GV Ngô Công Th
ắ
ng
B
ộ
môn Công ngh
ệ
ph
ầ
n m
ề
m
Khoa Công ngh
ệ
thông tin
Website: dse.hua.edu.vn/ncthang
Email: ncthang@vnua.edu.vn
Ch
ươ
ng 1: Cây (Tree)
1
Đị
nh ngh
ĩ
a khái ni
ệ
m
2 Cây nh
ị
phân
(2)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
1
Đị
nh ngh
ĩ
a khái ni
ệ
m
1.1
Đị
nh ngh
ĩ
a (tree)
l
Cây m
ộ
t t
ậ
p h
ợ
p h
ữ
u h
ạ
n nút,
đ
ó có m
ộ
t nút
đặ
c bi
ệ
t g
ọ
i g
ố
c (root)
Gi
ữ
a nút có m
ộ
t quan h
ệ
phân c
ấ
p g
ọ
i
là quan h
ệ
cha con.
l
M
ộ
t khơng có nút g
ọ
i r
ỗ
ng
(null tree).
l
Các ví d
ụ
v
ề
cây
1.3
Ví d
ụ
1: M
ụ
c l
ụ
c c
ủ
a m
ộ
t ch
ươ
ng
đượ
c bi
ể
u di
ễ
n d
ạ
ng cây
Ch
ươ
ng 6
6.1
6.2
6.2.1
6.2.2
6.3
(3)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
Ví d
ụ
2: Bi
ể
u th
ứ
c s
ố
h
ọ
c
đượ
c
bi
ể
u di
ễ
n d
ạ
ng cây
x+y*(z-t)+u/v
1.5
Ví d
ụ
3: Các t
ậ
p bao
đượ
c
bi
ể
u di
ễ
n d
ạ
ng cây
(4)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
1.2 Các khái ni
ệ
m
l
G
ố
c (Root): G
ố
c nút
đặ
c bi
ệ
t khơng có
nút cha.
Ví d
ụ
3: A g
ố
c A cha c
ủ
a B, E, F.
B, E, F c
ủ
a A.
B, E, F c
ũ
ng g
ố
c c
ủ
a c
ủ
a A
l
C
ấ
p (Degree): S
ố
c
ủ
a m
ộ
t nút g
ọ
i
c
ấ
p c
ủ
a nút
đ
ó.
Ví d
ụ
3: A có c
ấ
p E, F có c
ấ
p 0.
B có c
ấ
p 2.
1.7
1.2 Các khái ni
ệ
m (
ti
ế
p
)
l
Lá (Leaf): Nút có c
ấ
p b
ằ
ng khơng g
ọ
i hay
nút t
ậ
n cùng.
Ví d
ụ
3: C,D,E,F lá.
l
Nút nhánh (Branch Node): Nút không
đượ
c
g
ọ
i nút nhánh hay nút trong.
Ví d
ụ
3:
B nút nhánh.
l
M
ứ
c (Level): G
ố
c có m
ứ
c N
ế
u nút cha
có m
ứ
c i nút có m
ứ
c i+1.
(5)Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
1.2 Các khái ni
ệ
m (
ti
ế
p
)
l
Chi
ề
u cao c
ủ
a (Height) hay chi
ề
u sâu c
ủ
a
cây (Depth): Là s
ố
m
ứ
c l
ớ
n nh
ấ
t c
ủ
a nút có
cây.
Ví d
ụ
1: Cây có chi
ề
u cao 3
Ví d
ụ
2: Cây có chi
ề
u cao 5
Ví d
ụ
3: Cây có chi
ề
u cao 3
l
Đườ
ng
đ
i (Path): N
ế
u n
1
, n
2
, , n
k
là dãy nút
mà n
i
là cha c
ủ
a n
i+1
(1
≤
i<k) dãy
đ
ó g
ọ
i
đườ
ng
đ
i t
ừ
n
1
đế
n n
k
Độ
dài c
ủ
a
đườ
ng
đ
i
b
ằ
ng s
ố
nút tr
ừ
đ
i .
Ví d
ụ
3:
Đườ
ng
đ
i t
ừ
A
đế
n C c
ố
độ
dài 3-1=2.
Đườ
ng
đ
i t
ừ
A
đế
n E c
ố
độ
dài 2-1=1.
1.9
1.2 Các khái ni
ệ
m (
ti
ế
p
)
l
N
ế
u th
ứ
t
ự
c
ủ
a m
ộ
t nút
đượ
c coi
tr
ọ
ng
đ
ang xét có th
ứ
t
ự
, ng
ượ
c l
ạ
i
là khơng có th
ứ
t
ự
.
l
Th
ườ
ng th
ứ
t
ự
c
ủ
a m
ộ
t nút
(6)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
1.2 Các khái ni
ệ
m (
ti
ế
p
)
l
Đố
i v
ớ
i cây, quan h
ệ
cha con, ng
ườ
i
ta m
ở
r
ộ
ng ph
ỏ
ng theo quan h
ệ
gia t
ộ
c.
l
R
ừ
ng (Forest): N
ế
u có m
ộ
t t
ậ
p h
ữ
u h
ạ
n
các phân bi
ệ
t ta g
ọ
i t
ậ
p
đ
ó r
ừ
ng.
l
N
ế
u b
ỏ
nút g
ố
c c
ủ
a m
ộ
t ta s
ẽ
có
m
ộ
t r
ừ
ng
1.11
2 Cây nh
ị
phân
2.1
Đị
nh ngh
ĩ
a tính ch
ấ
t
2.1.1
Đị
nh ngh
ĩ
a nh
ị
phân
l
Cây nh
ị
phân d
ạ
ng
đặ
c bi
ệ
t c
ủ
a c
ấ
u trúc
cây, m
ọ
i nút ch
ỉ
có t
ố
i
đ
a con.
(7)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
Ví d
ụ
1: Hai sau
đ
ây khác nhau
1.13
Ví d
ụ
2: Cây nh
ị
phân suy bi
ế
n có
d
ạ
ng m
ộ
t danh sách tuy
ế
n tính
Cây l
ệ
ch trái
(8)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
Ví d
ụ
2: Cây nh
ị
phân suy bi
ế
n có d
ạ
ng
m
ộ
t danh sách tuy
ế
n tính (
ti
ế
p
)
Cây zíc z
ắ
c
1.15
2.1.1
Đị
nh ngh
ĩ
a nh
ị
phân (
ti
ế
p
)
(9)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
2.1.1
Đị
nh ngh
ĩ
a nh
ị
phân (
ti
ế
p
)
l
Cây nh
ị
phân
đầ
y
đủ
: Là nh
ị
phân mà
nút
ở
m
ọ
i m
ứ
c c
ủ
a nút nhánh
đề
u có hai con.
Cây nh
ị
phân
đầ
y
đủ
tr
ườ
ng h
ợ
p
đặ
c bi
ệ
t c
ủ
a
cây nh
ị
phân hồn ch
ỉ
nh.
1.17
2.1.2 Tính ch
ấ
t
l
S
ố
l
ượ
ng t
ố
i
đ
a nút
ở
m
ứ
c i
nh
ị
phân 2
(i-1)
(i
≥
1).
(10)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
2.2 L
ư
u tr
ữ
nh
ị
phân
2.2.1 L
ư
u tr
ữ
k
ế
ti
ế
p
l
V
ớ
i nh
ị
phân
đầ
y
đủ
, ta
đ
ánh s
ố
nút t
ừ
tr
ở
đ
i, t
ừ
trái qua ph
ả
i, h
ế
t m
ứ
c
này
đế
n m
ứ
c khác.
l
Dùng véc t
ơ
V l
ư
u tr
ữ
nh
ị
phân, nút th
ứ
i c
ủ
a
đượ
c l
ư
u tr
ữ
ở
nh
ớ
V[i] Ví d
ụ
:
1.19
2.2.1 L
ư
u tr
ữ
k
ế
ti
ế
p (
ti
ế
p
)
l
V
ớ
i cách l
ư
u tr
ữ
b
ằ
ng m
ả
ng, bi
ế
t
đị
a
ch
ỉ
c
ủ
a nút cha s
ẽ
tính
đượ
c
đị
a ch
ỉ
c
ủ
a
nút ng
ượ
c l
ạ
i N
ế
u nút cha i thì
con trái 2i ph
ả
i 2i+1 N
ế
u nút
con i nút cha [i/2].
l
N
ế
u không
đầ
y
đủ
ta ph
ả
i thêm các
nút tr
ố
ng vào
để đươ
c nh
ị
phân
đầ
y
(11)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
Ví d
ụ
1.21
2.2.2 L
ư
u tr
ữ
ph
ầ
n tán
l
Trong cách l
ư
u tr
ữ
này, m
ỗ
i nút
ứ
ng v
ớ
i m
ộ
t
ph
ầ
n t
ử
nh
ớ
có quy cách d
ướ
i
đ
ây.
l
Để
truy nh
ậ
p vào nút nh
ị
phân c
ầ
n
có m
ộ
t tr
ỏ
T tr
ỏ
vào nút g
ố
c c
ủ
a
đ
ó.
(12)Ngơ Cơng Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
Ví d
ụ
1.23
2.3 Các phép toán duy
ệ
t nh
ị
phân
l
Phép x
ử
lý nút (g
ọ
i chung
phép th
ă
m - visit) cách th
ă
m t
ấ
t c
ả
nút
c
ủ
a m
ộ
t cách h
ệ
th
ố
ng, cho m
ỗ
i nút
ch
ỉ
đượ
c th
ă
m m
ộ
t l
ầ
n
l
M
ộ
t nút có con, ta có cách duy
ệ
t,
cách duy
ệ
t
đượ
c
đị
nh ngh
ĩ
a
đệ
quy nh
ư
sau:
l
Cách 1: Duy
ệ
t theo th
ứ
t
ự
tr
ướ
c (preorder
traversal)
(13)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
2.3 Duy
ệ
t nh
ị
phân (
ti
ế
p
)
l
Cách 2: Duy
ệ
t theo th
ứ
t
ự
gi
ữ
a (inorder
traversal)
l
Duy
ệ
t trái theo th
ứ
t
ự
gi
ữ
a
l
Th
ă
m g
ố
c
l
Duy
ệ
t ph
ả
i theo th
ứ
t
ự
gi
ữ
a
l
Cách 3: Duy
ệ
t theo th
ứ
t
ự
sau ( postorder
traversal)
l
Duy
ệ
t trái theo th
ứ
t
ự
sau
l
Duy
ệ
t ph
ả
i theo th
ứ
t
ự
sau
l
Th
ă
m g
ố
c
1.25
(14)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
2.3 Duy
ệ
t nh
ị
phân (
ti
ế
p
)
l
Các th
ủ
t
ụ
c duy
ệ
t nh
ị
phân
đề
u
đượ
c
vi
ế
t
ở
d
ạ
ng
đệ
qui.
l
Gi
ả
s
ử
nh
ị
phân l
ư
u tr
ữ
b
ằ
ng danh
sách liên k
ế
t, T tr
ỏ
tr
ỏ
t
ớ
i g
ố
c, phép
th
ă
m in giá tr
ị
tr
ườ
ng Infor c
ủ
a nút
đ
ó.
1.27
Duy
ệ
t theo th
ứ
t
ự
tr
ướ
c:
Procedure PreOrder(T)
If T =
φ
then
Return
Else Begin
Write(Infor(T))
Call PreOrder(Lptr(T))
Call PreOrder(Rptr(T))
(15)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
Duy
ệ
t theo th
ứ
t
ự
gi
ữ
a:
Procedure InOrder(T)
If T =
φ
then Begin
Return
End
Else Begin
Call InOrder(Lptr(T))
Write(Infor(T))
Call InOrder(Rptr(T))
End;
Return
1.29
Duy
ệ
t theo th
ứ
t
ự
sau:
Procedure PostOrder(T)
If T =
φ
then Begin
(16)Bài t
ậ
p
l
Bài 1:
l
Xây d
ự
ng nh
ị
phân bi
ể
u di
ễ
n bi
ể
u th
ứ
c:
(a+b/c)*(d-e*f)
l
V
ẽ
s
ơ đồ
l
ư
u tr
ữ
cây nh
ị
phân bi
ể
u di
ễ
n bi
ể
u
th
ứ
c
ở
d
ạ
ng l
ư
u tr
ữ
k
ế
ti
ế
p, l
ư
u tr
ữ
liên k
ế
t.
l
Cho bi
ế
t th
ứ
t
ự
các nút duy
ệ
t nh
ị
phân
đ
ó theo cách.
Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01 1.31
Bài t
ậ
p (ti
ế
p)
Bài Cho nh
ị
phân d
ướ
i
đ
ây Hãy
l
V
ẽ
s
ơ
đồ
l
ư
u tr
ữ
nh
ị
phân
ở
d
ạ
ng l
ư
u tr
ữ
k
ế
ti
ế
p l
ư
u tr
ữ
liên k
ế
t
(17)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
3 Cây t
ổ
ng quát
l
Cây t
ổ
ng quát có c
ấ
p m
đ
ó.
l
N
ế
u bi
ể
u di
ễ
n t
ổ
ng quát b
ằ
ng danh sách
liên k
ế
t m
ộ
t nút có nhánh s
ẽ
có
b
ấ
y nhiêu tr
ườ
ng liên k
ế
t, cách bi
ể
u di
ễ
n
ph
ứ
c t
ạ
p N
ế
u bi
ể
u di
ễ
n b
ằ
ng m
ả
ng
trình x
ử
lý c
ũ
ng r
ấ
t ph
ứ
c t
ạ
p.
l
Để
đơ
n gi
ả
n ta bi
ể
u di
ễ
n t
ổ
ng quát b
ằ
ng
nh
ị
phân Ta nh
ậ
n th
ấ
y v
ớ
i b
ấ
t k
ỳ
nút
cây t
ổ
ng quát n
ế
u có ch
ỉ
có:
l
M
ộ
t nút c
ự
c trái (con c
ả
)
l
M
ộ
t nút em k
ề
c
ậ
n ph
ả
i
1.33
3 Cây t
ổ
ng quát
l
Khi chuy
ể
n sang nh
ị
phân t
ươ
ng
đươ
ng,
m
ỗ
i nút có trái c
ự
c trái, ph
ả
i
em k
ề
c
ậ
n ph
ả
i.
(18)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
Ví d
ụ
:
Cây t
ổ
ng quát
Cây nh
t
ươ
ng
đươ
ị
phân
ng
1.35
3 Cây t
ổ
ng quát
l
Sau chuy
ể
n thành nh
ị
phân t
ươ
ng
đươ
ng ta có th
ể
l
ư
u tr
ữ
t
ổ
ng quát
b
ằ
ng danh sách liên k
ế
t.
(19)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
4
Ứ
ng d
ụ
ng
4.1 Cây bi
ể
u di
ễ
n bi
ể
u th
ứ
c
l
Bi
ể
u th
ứ
c s
ố
h
ọ
c v
ớ
i phép tốn ngơi nh
ư
+ - * / có th
ể
bi
ể
u di
ễ
n b
ở
i nh
ị
phân có
nút v
ớ
i quy cách nh
ư
sau:
1.37
4.1 Cây bi
ể
u di
ễ
n bi
ể
u th
ứ
c (
ti
ế
p
)
(20)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
Ví d
ụ
: Bi
ể
u di
ễ
n bi
ể
u th
ứ
c a*b+c/2
b
ằ
ng nh
ị
phân sau:
1.39
4.2
Đị
nh giá tr
ị
bi
ể
u th
ứ
c
l
Thu
ậ
t gi
ả
i
đị
nh giá tr
ị
bi
ể
u th
ứ
c bi
ể
u di
ễ
n b
ở
i nh
ị
phân có g
ố
c E
Thu
ậ
t gi
ả
i
đượ
c vi
ế
t d
ướ
i d
ạ
ng
đệ
quy:
Function EVAL(E)
Case
TYPE(E)=0: Begin F:=RPTR(E)
Return(Value(F))
End
TYPE(E)=1: Return ( EVAL(LPTR(E))+EVAL(RPTR(E)))
TYPE(E)=2: Return ( EVAL(LPTR(E))-EVAL(RPTR(E)))
TYPE(E)=3: Return ( EVAL(LPTR(E))*EVAL(RPTR(E)))
TYPE(E)=4: Return ( EVAL(LPTR(E))/EVAL(RPTR(E)))
TYPE(E)=5: Return ( - EVAL(RPTR(E)))
Else Return(00)
End case
(21)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01
4.3 Xác
đị
nh bi
ể
u th
ứ
c t
ươ
ng
đươ
ng
l
Cho nh
ị
phân bi
ể
u di
ễ
n bi
ể
u th
ứ
c tr
ỏ
b
ở
i A, B Hàm xác
đị
nh bi
ể
u th
ứ
c t
ươ
ng
đươ
ng Similar cho giá tr
ị
True n
ế
u bi
ể
u
th
ứ
c t
ươ
ng
đươ
ng, ng
ượ
c l
ạ
i cho giá tr
ị
False.
1.41
Hàm Similar
Function Similar(A,B)
B
ướ
c { Ki
ể
m tra lo
ạ
i g
ố
c cây}
If TYPE(A)# TYPE(B) then Return(False)
B
ướ
c { Ki
ể
m tra tính t
ươ
ng
đươ
ng }
Case
TYPE(A)=0 : If Value(RPTR(A)) # Value(RPTR(B)) then Return(False)
Else Return(True)
TYPE(A)=1 OR TYPE(A)=3 : { Phép + ho
ặ
c * }
Begin
(22)Ngô Công Thắng Bài giảng Cấu trúc liệu giải thuật - Chương 01