Chương IV Cấu trúc Cây - Giáo trình Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Cây là một cấu trúc phi tuyến, thiết lập trên một tập hữu hạn các “nút” Tồn tại một nút đặc biệt gọi là “gốc” (root) Giữa các nút tồn tại một quan hệ phân cấp hay gọi là quan hệ cha con Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 1
Cutrúcd liuvàGiithut
Chương IV: Cu trúc Cây
Đỗ Bích Dip - Khoa CNTT
CutrúcCây
z Ni dung
1. Các khái nim
2. Cây tng quát
1. ADT Cây
2. Biudincâytng quát
3. Duytcâytng quát
3. Cây nh phân
1. Định nghĩavàtínhcht
2. Duyt cây nh phân
3. Biudin cây nh phân
4. ng dng cacu trúc cây cho cây biuthc
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 2
Đỗ Bích Dip - Khoa CNTT
Định nghĩaCây
Cây mtcu trúc phi tuyến, thiếtlptrênmt
tphuhn các “nút”
Tntimtnútđặcbitgilà“gc” (root)
Gia các t tntimt quan h phân cp hay gi
quan h cha con
Mtnúttr nút gcch mtcha
Mtnútcóth t 0 đếnn con
Đỗ Bích Dip - Khoa CNTT
Định nghĩaCây
z Định nghĩa đệ quy v
Cây
Mtnútto thành mt
cây.
Nếucón câyT
1
, T
2
, …,
T
n
tách bit các nút
gclnlượtlàr
1
, r
2
, … ,
r
n
; r mt nút quan
h cha-con vir
1
, r
2
, … ,
r
n
thì tntimtcâymi
T nhnr làmgc.
r
rnr2r1
T1
T2
Tn
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 3
Đỗ Bích Dip - Khoa CNTT
d Cây
Desktop
My
Documents
My Network
Places
My Compute r
CD Driver
(D:)
Window sXP
(C:)
Floppy(A:)
My Received
Files
My Pic t ure s
My Music
Cây thư mctrongmáytính
Đỗ Bích Dip - Khoa CNTT
d Cây
Cây phân cpchcnăng h thng thông tin
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 4
Đỗ Bích Dip - Khoa CNTT
d Cây
Cây mclcSách
Đỗ Bích Dip - Khoa CNTT
Các thutng liên quan đến cây
Cp (Degree) camt nút cacây
z Cpcamt nút s các con canútđó
z Cpcamtcâylàcpcaonhtcamt nút trên cây
A
JH
DCB
E F G I K
L M N
Degree 2
Degree 3
Degree 4
Degree 3
P
Degree 1
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 5
Đỗ Bích Dip - Khoa CNTT
Các thutng liên quan đến cây
Đường đitrêncây:
z Dãy các nút n
1
, n
2
, .., n
k
trong đón
i
nút cha can
i+1
( i =
1..k-1) là đường đit n
1
đếnn
k
A
JH
DCB
E F G I K
L M N
Path from A to M
Length = 3
P
Đỗ Bích Dip - Khoa CNTT
Các thutng liên quan đến cây
z Độ sâu hay mc (Depth – Level ) canút
Độ dài đường đit gc đếnnútđó+ 1
A
JH
DCB
E F G I K
L M N
Depth 1
Depth 2
Depth 3
Depth 4
P
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 6
Đỗ Bích Dip - Khoa CNTT
Các thutng liên quan đến cây
z Độ cao (Height) canút
Độ dài đường đi dài nhtt nút đó đến 1 nút trong cây +
1
Chiucaoca cây chiucaoca nút gccacâyđó
A
JH
DCB
E F G I K
L M NP
Height = 1
Height = 2
Height =3
Height =4
Đỗ Bích Dip - Khoa CNTT
Các thutng liên quan đến cây
z T tiên (Ancestor): A,C, G là t tiên caM
z Hudu (descendants): E, F, G, H, L,M …đềulàhudu caA
z Anh em (siblings): E, F là mtcp anh em ; L, N là mtcp anh
em
A
JH
D
CB
E F G I K
L M NP
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 7
Đỗ Bích Dip - Khoa CNTT
Các thutng liên quan đến cây
z Rng mttphphuhn các cây phân bit, không
giao nhau
JH
DCB
E F G I K
L M N
Đỗ Bích Dip - Khoa CNTT
Các thao tác cơ bntrênCây
Cácthaotáctruynhpcây
z root() : tr ra nút gccacây
z parent( Tree T, Node p): tr ra nút cha ca nút p trong cây T
z children(Tree T, Node p): tr ra danh sách các nút con ca nút p trong
cây T
z left_most_child(Tree T, Node p) : tr ra nút con cctráica nút p
z right_most_child(Tree T, Node p) : tr ra t con ccphica nút p
z left_sibling (Tree T, Node p) : tr ra nút anh em k cn bên trái ca nút
p
z right_sibling(Tree T, Node p) : tr ra nút anh em k cn bên phica
nút p
Các thao tác khác
z height (Tree T)
z size(Tree T)
z isRoot (Tree T, Node p); isLeaf (Tree T, Node p);
isInternal (Tree T, Node p);
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 8
Đỗ Bích Dip - Khoa CNTT
Biudin cây tng quát
Datrênthamchiếu đến nút cha
z Cây T có các nút được đánh s t 1 đếnn
z Cây T đượcbiudinbng mt danh sách tuyếntính
trong đónútth i s chamt thành phnthamchiếu
đến cha canó
z Nếu dùng mng, A[i] = j nếuj làcha ca nút i ; nếui là
gc thì A[i] = 0;
A
H
D
CB
E G
L N
1
2
3
4
56 7
89
A[9]A[8]A[7]A[6]A[5]A[4]A[3]A[2]A[1]
663321110
Đỗ Bích Dip - Khoa CNTT
Biudin cây tng quát
Da trên danh sách các nút con
z 1 nút trong cây mt danh sách các nút con
z Danh sách c nút con thường danh sách móc ni
z Trong trường hps dng danh ch móc ni, các nút
đầu danh sách đưclưu trong mtmng
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 9
Đỗ Bích Dip - Khoa CNTT
Biudin cây tng quát
Da trên danh sách các nút con
A
H
D
CB
E G
L N
1
2
3
4
56 7
89
NULL
NULL
NULL
98
NULL
NULL
76
5
432
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
A[7]
A[8]
A[9]
Đỗ Bích Dip - Khoa CNTT
Biudin cây tng quát
Thông qua mtcâycp2
z Vimt nút trong cây , ch quan tâm ti 2 quan h
Quan h 1-1 gia nút đó nút con cctráicanó(con c)
Quan h 1-1 gia nút đóvànútemkế cn bên phicanó
z Da vào nhn định này, ngườitabiudin đượcmtcây
tng quát dướidng mt cây nh phân gilàcây nh phân
tương đương (equivalent binary tree)
z Quy cách ca 1 nút trên y nh phân tương đương s
như sau
RSIBLINGINFOLCHILD
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 10
Đỗ Bích Dip - Khoa CNTT
Biudin cây tng quát
z d:
y tng quát
y nh phân tương đương
A
H
DCB
E F G I K
A
B
E
F
C
G D
H
I
K
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
I. A
1. B 3.D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
3
5
4
678
9
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
2
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 11
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 12
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 13
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
3
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
Thăm nút con
tiếptheo
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
3
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 14
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
3
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
3
4
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 15
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
Không còn con
Quay li nút gc
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
3
4
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
3
4
Thăm nút con
tiếptheocagc
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 16
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
3
4
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t trước
z Duytcâylàthăm các nút trên cây
theo mtth t nht định, mi nút
thăm1 ln
z Khi duyt theo th t trước, mt nút
s đượcthămtrướccáchudu
canó
z ng dng: In ra các mclcca
mttàiliu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
I. A
1. B 3. D2. C
2.1 G 2.2 H1.1 E 1.2 F
2.3 I
1
2
3
4
5
tiếptcnhư vy….
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 17
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t sau
z Duyt theo th t sau thì mt nút
s đượcthămsaucáchudu
canó
z ng dng: Xác định kích thước
cacáctp trong mtthư mcvà
các thư mc con ca
Algorithm postOrder(v)
for each child w of v
postOrder(w)
visit(v)
cs16/
homeworks/
todo.txt
1K
programs/
DDR.java
10K
Stocks.java
25K
h1c.doc
3K
h1nc.doc
2K
Robot.java
20K
9
3
1
7
2
45 6
8
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t gia
z Duyt theo th t giathìmt nút
s đượcthămsaucáchudu
canótrongcâycon cctráivà
trướccáchudu trong các cây
con tiếp theo
Algorithm inOrder(v)
if (isLeaf(v)) then visit(v)
else
inOrder(left_most_child(v))
visit(v)
for each child w of v (w is
not the left most child)
inOrder(w)
cs16/
homeworks/
todo.txt
1K
programs/
DDR.java
10K
Stocks.java
25K
h1c.doc
3K
h1nc.doc
2K
Robot.java
20K
4
2
1
6
3
57 8
9
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 18
Đỗ Bích Dip - Khoa CNTT
Cây nh phân ( Binary Tree)
cây mi nút trên cây ch ti đalà2 con.
z Cây con camtnútcũng cnphi đượcphânbitrõ
ràng thành cây con trái (left subtree) và cây con phi
(right subtree)
A
B C
E
F
D
G
left-subtree
right-subtree
Đỗ Bích Dip - Khoa CNTT
d cây nh phân
Cây biuthcs hcvi các phép toán 2 ngôi
+
- /
x
z
x
*
3 y
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 19
Đỗ Bích Dip - Khoa CNTT
d cây nh phân
Cây quyết định
Want a fast meal?
How about coffee? On expense account?
Starbucks Spike’s Al Forno Café Paragon
Yes
No
Yes No Yes No
Đỗ Bích Dip - Khoa CNTT
d cây nh phân
Kếtqu thi đấumtmônth thao theo cptinhiu
vòng
H
A H
H
F
A
E
C
EA D B H G F
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 20
Đỗ Bích Dip - Khoa CNTT
Các dng đặcbitca cây nh phân
z Cây suy biến (degenerate binary tree)
Mi nút trong cacâycóđúng 1 nút con
A
C
F
G
A
C
F
G
A
C
F
G
A
C
G
F
(a)
(b) (c) (d)
Đỗ ch Dip - Khoa CNTT
Các dng đặcbitca cây nh phân
z Cây nh phân đầy đủ (full
binary tree)
Mi nút trong cacâyđều
đầy đủ 2 con
z Cây nh phân gn đầy
mccui cùng không
đầy đủ các nút
A
B C
E
F
D G
A
B C
F
G
D
K
E
IH J
| 1/30

Preview text:

Cấu trúc dữ liệu và Giải thuật
Cấu trúc dữ liệu và Giải thuật Chương IV: Cấu trúc Cây Cấu trúc Cây z Nội dung 1. Các khái niệm 2. Cây tổng quát 1. ADT Cây 2.
Biểu diễn cây tổng quát 3. Duyệt cây tổng quát 3. Cây nhị phân 1.
Định nghĩa và tính chất 2. Duyệt cây nhị phân 3. Biểu diễn cây nhị phân 4.
Ứng dụng của cấu trúc cây cho cây biểu thức
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 1
Cấu trúc dữ liệu và Giải thuật Định nghĩa Cây
− Cây là một cấu trúc phi tuyến, thiết lập trên một
tập hữu hạn các “nút”
– Tồn tại một nút đặc biệt gọi là “gốc” (root)
– Giữa các nút tồn tại một quan hệ phân cấp hay gọi là quan hệ cha con
– Một nút trừ nút gốc chỉ có một cha
– Một nút có thể có từ 0 đến n con
Đỗ Bích Diệp - Khoa CNTT Định nghĩa Cây
z Định nghĩa đệ quy về Cây r
– Một nút tạo thành một cây.
– Nếu có n cây T , T , …, 1 2 r1 r2 rn T tách biệt có các nút n
gốc lần lượt là r , r , … , 1 2 r ; r là một nút có quan n
hệ cha-con với r , r , … , T1 T2 Tn 1 2
r thì tồn tại một cây mới n T nhận r làm gốc.
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 2
Cấu trúc dữ liệu và Giải thuật Ví dụ Cây
Cây thư mục trong máy tính Desktop My Network My My Computer Places Documents WindowsXP CD Driver My Received Floppy(A:) My Pictures (C:) (D:) Files My Music
Đỗ Bích Diệp - Khoa CNTT Ví dụ Cây
Cây phân cấp chức năng hệ thống thông tin
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 3
Cấu trúc dữ liệu và Giải thuật Ví dụ Cây Cây mục lục Sách
Đỗ Bích Diệp - Khoa CNTT
Các thuật ngữ liên quan đến cây
– Cấp (Degree) của một nút và của cây
z Cấp của một nút là số các con của nút đó
z Cấp của một cây là cấp cao nhất của một nút trên cây Degree 3 Degree 2 A Degree 4 B C D Degree 1 E F G H I J K Degree 3 P L M N
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 4
Cấu trúc dữ liệu và Giải thuật
Các thuật ngữ liên quan đến cây – Đường đi trên cây:
z Dãy các nút n , n , .., n trong đó n là nút cha của n ( i = 1 2 k i i+1
1..k-1) là đường đi từ n đến n 1 k Path from A to M A Length = 3 B C D E F G H I J K P L M N
Đỗ Bích Diệp - Khoa CNTT
Các thuật ngữ liên quan đến cây
z Độ sâu hay mức (Depth – Level ) của nút
– Độ dài đường đi từ gốc đến nút đó + 1 A Depth 1 B C D Depth 2 E F G H I J K Depth 3 L M N Depth 4 P
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 5
Cấu trúc dữ liệu và Giải thuật
Các thuật ngữ liên quan đến cây
z Độ cao (Height) của nút
– Độ dài đường đi dài nhất từ nút đó đến 1 nút lá trong cây + 1
– Chiều cao của cây là chiều cao của nút gốc của cây đó Height =4 Height =3 A B C D Height = 2 E F G H I J K P L M N Height = 1
Đỗ Bích Diệp - Khoa CNTT
Các thuật ngữ liên quan đến cây
z Tổ tiên (Ancestor): A,C, G là tổ tiên của M
z Hậu duệ (descendants): E, F, G, H, L,M …đều là hậu duệ của A
z Anh em (siblings): E, F là một cặp anh em ; L, N là một cặp anh em A B C D E F G H I J K P L M N
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 6
Cấu trúc dữ liệu và Giải thuật
Các thuật ngữ liên quan đến cây
z Rừng là một tập hợp hữu hạn các cây phân biệt , không giao nhau B C D E F G H I J K L M N
Đỗ Bích Diệp - Khoa CNTT
Các thao tác cơ bản trên Cây
– Các thao tác truy nhập cây
z root() : trả ra nút gốc của cây
z parent( Tree T, Node p): trả ra nút cha của nút p trong cây T
z children(Tree T, Node p): trả ra danh sách các nút con của nút p trong cây T
z left_most_child(Tree T, Node p) : trả ra nút con cực trái của nút p
z right_most_child(Tree T, Node p) : trả ra nút con cực phải của nút p
z left_sibling (Tree T, Node p) : trả ra nút anh em kề cận bên trái của nút p
z right_sibling(Tree T, Node p) : trả ra nút anh em kề cận bên phải của nút p – Các thao tác khác z height (Tree T) z size(Tree T)
z isRoot (Tree T, Node p); isLeaf (Tree T, Node p); isInternal (Tree T, Node p);
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 7
Cấu trúc dữ liệu và Giải thuật
Biểu diễn cây tổng quát
– Dựa trên tham chiếu đến nút cha
z Cây T có các nút được đánh số từ 1 đến n
z Cây T được biểu diễn bằng một danh sách tuyến tính
trong đó nút thứ i sẽ chứa một thành phần tham chiếu đến cha của nó
z Nếu dùng mảng, A[i] = j nếu j là cha của nút i ; nếu i là 1 gốc thì A[i] = 0; A 2 3 4 B C D 0 1 1 1 2 3 3 6 6 5 6 7 E G H A[1]
A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] 8 9 L N
Đỗ Bích Diệp - Khoa CNTT
Biểu diễn cây tổng quát
– Dựa trên danh sách các nút con
z 1 nút trong cây có một danh sách các nút con
z Danh sách các nút con thường là danh sách móc nối
z Trong trường hợp sử dụng danh sách móc nối, các nút
đầu danh sách được lưu trong một mảng
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 8
Cấu trúc dữ liệu và Giải thuật
Biểu diễn cây tổng quát
– Dựa trên danh sách các nút con A[1] 2 3 4 1 A[2] A 5 2 3 4 B C D A[3] 6 7 5 6 7 A[4] NULL E G H A[5] NULL 8 9 A[6] 8 9 L N A[7] NULL A[8] NULL A[9] NULL
Đỗ Bích Diệp - Khoa CNTT
Biểu diễn cây tổng quát
– Thông qua một cây cấp 2
z Với một nút trong cây , chỉ quan tâm tới 2 quan hệ
– Quan hệ 1-1 giữa nút đó và nút con cực trái của nó (con cả)
– Quan hệ 1-1 giữa nút đó và nút em kế cận bên phải của nó
z Dựa vào nhận định này, người ta biểu diễn được một cây
tổng quát dưới dạng một cây nhị phân gọi là cây nhị phân
tương đương (equivalent binary tree)
z Quy cách của 1 nút trên cây nhị phân tương đương sẽ như sau LCHILD INFO RSIBLING
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 9
Cấu trúc dữ liệu và Giải thuật
Biểu diễn cây tổng quát A z Ví dụ: – Cây tổng quát B C D E F G H I K A
– Cây nhị phân tương đương B E C F G D H I
Đỗ Bích Diệp - Khoa CNTT K
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 2 5 9 1. B 2. C 3.D 3 4 6 7 8 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 10
Cấu trúc dữ liệu và Giải thuật
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần ⇒
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 1. B 2. C 3. D 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó ⇒
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 1. B 2. C 3. D 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 11
Cấu trúc dữ liệu và Giải thuật
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần ⇒
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 2 1. B 2. C 3. D 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó ⇒
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 2 1. B 2. C 3. D 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 12
Cấu trúc dữ liệu và Giải thuật
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần ⇒
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 2 1. B 2. C 3. D 3 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 2 Thăm nút con 1. B tiếp theo 2. C 3. D 3 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 13
Cấu trúc dữ liệu và Giải thuật
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 2 1. B 2. C 3. D 3 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần ⇒
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 2 1. B 2. C 3. D 3 4 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 14
Cấu trúc dữ liệu và Giải thuật
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu Không còn con 1 I. A Quay lại nút gốc 2 1. B 2. C 3. D 3 4 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu Thăm nút con 1 I. A tiếp theo của gốc 2 1. B 2. C 3. D 3 4 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 15
Cấu trúc dữ liệu và Giải thuật
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ ⇒ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1 I. A 2 1. B 2. C 3. D 3 4 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước z
Duyệt cây là thăm các nút trên cây
theo một thứ tự nhất định, mỗi nút
Algorithm preOrder(v) thăm 1 lần ⇒
visit(v) z
Khi duyệt theo thứ tự trước, một nút
for each child w of v
sẽ được thăm trước các hậu duệ của nó
preOrder(w) z
Ứng dụng: In ra các mục lục của một tài liệu 1
Và tiếp tục như vậy …. I. A 2 1. B 5 2. C 3. D 3 4 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 16
Cấu trúc dữ liệu và Giải thuật
Duyệt cây theo thứ tự sau z
Duyệt theo thứ tự sau thì một nút
Algorithm postOrder(v)
sẽ được thăm sau các hậu duệ
for each child w of v của nó
postOrder(w) z
Ứng dụng: Xác định kích thước
của các tệp trong một thư mục và
visit(v) các thư mục con của 9 cs16/ 8 3 7 homeworks/ todo.txt programs/ 1K 1 2 4 5 6 h1c.doc h1nc.doc DDR.java Stocks.java Robot.java 3K 2K 10K 25K 20K
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự giữa z
Duyệt theo thứ tự giữa thì một nút
Algorithm inOrder(v)
sẽ được thăm sau các hậu duệ
if (isLeaf(v)) then visit(v)
của nó trong cây con cực trái và else
trước các hậu duệ trong các cây con tiếp theo
inOrder(left_most_child(v)) visit(v)
for each child w of v (w is not the left most child)
4 cs16/
inOrder(w) 9 2 6 homeworks/ todo.txt programs/ 1K 1 3 5 7 8 h1c.doc h1nc.doc DDR.java Stocks.java Robot.java 3K 2K 10K 25K 20K
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 17
Cấu trúc dữ liệu và Giải thuật
Cây nhị phân ( Binary Tree)
– Là cây mà mọi nút trên cây chỉ có tối đa là 2 con.
z Cây con của một nút cũng cần phải được phân biệt rõ
ràng thành cây con trái (left subtree) và cây con phải (right subtree) A left-subtree right-subtree B C E F D G
Đỗ Bích Diệp - Khoa CNTT
Ví dụ cây nhị phân
– Cây biểu thức số học với các phép toán 2 ngôi + - / x z x * 3 y
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 18
Cấu trúc dữ liệu và Giải thuật
Ví dụ cây nhị phân – Cây quyết định Want a fast meal? Yes No How about coffee? On expense account? Yes No Yes No Starbucks Spike’s Al Forno Café Paragon
Đỗ Bích Diệp - Khoa CNTT
Ví dụ cây nhị phân
– Kết quả thi đấu một môn thể thao theo cặp tại nhiều vòng H A H H F A E A D C E B H G F
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 19
Cấu trúc dữ liệu và Giải thuật
Các dạng đặc biệt của cây nhị phân
z Cây suy biến (degenerate binary tree)
– Mỗi nút trong của cây có đúng 1 nút con A A A A C C C C F F F F G G G G (a) (b) (c) (d)
Đỗ Bích Diệp - Khoa CNTT
Các dạng đặc biệt của cây nhị phân
z Cây nhị phân đầy đủ (full A binary tree)
– Mỗi nút trong của cây đều B C có đầy đủ 2 con E F D G A
z Cây nhị phân gần đầy
– Ở mức cuối cùng không B C có đầy đủ các nút E F G D H Đỗ Bích I Diệp - KJhoa CNTT K
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 20