Chương IV: Cấu trúc Cây | Cấu trúc dữ liệu và giải thuật | Đại học Bách Khoa, Đại học Đà Nẵng

Chương IV: Cấu trúc Cây | Cấu trúc dữ liệu và giải thuật | Đại học Bách Khoa, Đại học Đà Nẵng giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng, ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học

 

Thông tin:
30 trang 7 tháng trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Chương IV: Cấu trúc Cây | Cấu trúc dữ liệu và giải thuật | Đại học Bách Khoa, Đại học Đà Nẵng

Chương IV: Cấu trúc Cây | Cấu trúc dữ liệu và giải thuật | Đại học Bách Khoa, Đại học Đà Nẵng giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng, ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học

 

72 36 lượt tải Tải xuống
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 1
Cu trúc d liu Gii thut
Chương IV: Cu trúc Cây
Đỗ Bích Dip - Khoa CNTT
Cu trúc Cây
z Ni dung
1. Các khái nim
2. Cây tng quát
1. ADT Cây
2. Biu din cây tng quát
3. Duyt cây tng quát
3. Cây nh phân
1. Định nghĩa tính cht
2. Duyt cây nh phân
3. Biu din cây nh phân
4. ng d ng c a cu trúc cây cho cây biu thc
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 2
Đỗ Bích Dip - Khoa CNTT
Định nghĩa Cây
Cây mt c ếu trúc phi tuy n, thiết lp trên mt
tp hu hn các “nút”
Tn ti mt nút đặc bit gi “gc” (root)
Gia các nút tn ti m t quan h phân c p hay g i
quan h cha con
Mt nút tr nút gc ch mt cha
Mt nút th có t 0 đến n con
Đỗ Bích Dip - Khoa CNTT
Định nghĩa Cây
z Định nghĩ a đệ quy v
Cây
Mt nút to thành mt
cây.
Nếu n cây T
1 2
, T , …,
T
n
tách bit các nút
gc ln lượt r
1 2
, r , … ,
r
n
; r là mt nút quan
h cha-con vi r
1 2
, r , … ,
r
n
thì tn ti mt cây mi
T nhn r làm gc.
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 Computer
CD Driver
(D:)
WindowsXP
(C:)
Floppy(A:)
My Received
Files
My Pictures
My Music
Cây thư mc trong máy tính
d Cây
Cây phân cp chc nă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 mc lc Sách
Đỗ Bích Dip - Khoa CNTT
Các thut ng liên quan đến cây
Cp (Degree) ca m t nút c a cây
z Cp ca mt nút s các con ca nút đó
z Cp ca mt y cp cao nht ca mt 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 thut ng liên quan đến cây
Đường đi trên cây:
z Dãy các nút n
1
, n
2
, .., n
k
trong đó n
i
nút cha ca n
i+1
( i =
1..k-1) là đường đi t n
1
đến n
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 thut ng liên quan đến cây
z Độ sâu hay mc (Depth – Level ) ca nút
Độ dài đường đi t gc đến nú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 thut ng liên quan đến cây
z Độ cao (Height) ca nút
Độ dài đường đi dài nht t nút đó đến 1 nút trong cây +
1
Chiu cao ca cây chiu cao c a nút g c ca câ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 thut ng liên quan đến cây
z T tiên (Ancestor): A,C, G là t tiên ca M
z Hu du (descendants): E, F, G, H, L,M …đều hu du ca A
z Anh em (siblings): E, F là mt c p anh em ; L, N là m t cp anh
em
A
JH
DCB
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 thut ng liên quan đến cây
z Rng mt tp hp hu h n các cây phân bi t , 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ơ bn trên Cây
Các thao tác truy nhp cây
z root() : tr ra nút gc ca câ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 cc trái ca nút p
z right_most_child(Tree T, Node p) : tr ra nút con cc phi ca nút p
z left_sibling (Tree T, Node p) : tr ra nút anh em k n bên trái c a nút c
p
z right_sibling(Tree T, Node p) : tr ra nút anh em k cn bên phi ca
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
Biu din cây tng quát
Da 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 biu din b ếng m t danh sách tuy n tính
trong đó nút th i s cha m t thành ph n tham chiếu
đến cha ca
z Nếu dùng mng, A[i] = j nếu j là cha ca nút i ; nếu i là
gc thì A[i] = 0;
A
H
DCB
E G
L N
1
2
3
4
5 6 7
8 9
A[9]A[8]A[7]A[6]A[5]A[4]A[3]A[2]A[1]
663321110
Đỗ Bích Dip - Khoa CNTT
Biu din 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 hp s d ng danh sách móc n i, các nút
đầ đượu danh sách c lưu trong mt mng
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 9
Đỗ Bích Dip - Khoa CNTT
Biu din 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
5 6 7
8 9
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
Biu din cây tng quát
Thông qua mt cây cp 2
z Vi mt nút trong cây , ch quan tâm ti 2 quan h
Quan h 1-1 gia nút đó nút con cc trái ca nó (con c)
Quan h 1-1 gia nút đó nút em kế cn bên phi ca
z Da vào nhn định này, người ta biu din được mt cây
tng quát dưới d ng mt cây nh phân g i cây nh phân
tương đương (equivalent binary tree)
z Quy cách ca 1 nút trên cây nh phân t ng sương đươ
như sau
RSIBLINGINFOLCHILD
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 10
Đỗ Bích Dip - Khoa CNT
Biu din cây tng quát
z d:
Cây tng quát
Câ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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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
6 7 8
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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ếp theo
z Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 lại nút gốc
z Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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ếp theo của gốc
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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 Duyt cây thăm các nút trên cây
theo mt th t nh t định, m i nút
thăm 1 ln
z Khi duyt theo th t trước, mt nút
s được thăm trước các hu du
ca
z ng d ng: In ra các m c lc ca
mt tài liu
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ếp tục như vậy ….
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 được thăm sau các hu du
ca
z ng d ng: Xác đị ướnh kích th c
ca các t p trong m t thư mc
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
4 5 6
8
Đỗ Bích Dip - Khoa CNTT
Duyt cây theo th t gia
z Duyt theo th t gia thì mt nút
s được thăm sau các hu du
ca trong cây con cc trái
trước các hu du 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 ch ild)
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
5 7 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 đa 2 con.
z Cây con ca mt nút cũ ng c n phi được phân bit
ràng thành cây con trái (left subtree) và cây con ph i
(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 biu thc s hc vi 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ết qu thi đấu mt môn th thao theo cp ti nhiu
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 đặc bit ca cây nh phân
z Cây suy biến (degenerate binary tree)
Mi nút trong ca cây đú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 - hoa C TT
Các dng đặc bit ca cây nh phân
z Cây nh phân đầy đủ (full
binary tree)
Mi nút trong ca cây đều
đầy đủ 2 con
z Cây nh phân gn đầy
mc cui 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
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 21
Đỗ Bích Dip - Khoa CNTT
Các dng đặc bit ca cây nh phân
z Cây nh phân hoàn chnh
cây nh phân gn đầy
Tt c các nút mc cui cùng đều l ch v bên trái nh t th
z Cây nh phân cân đối
z Cây con trái cây con phi lch nhau không quá 1 đơn v
A
B C
F GD E
IH JL K
Đỗ Bích Dip - Khoa CNTT
Tính cht ca Cây nh phân
1. S lượng ti đa ca các nút mc i trên mt cây
nh phân 2
i-1
(i >= 1)
2. S lượng ti đa các nút trên mt cây nh phân
chiu cao h là 2
h
1 (h >= 1)
3. Mt cây nh phân n nút chiu cao ti thiu
4. Mt cây nh phân đầy đủ độ sâu n thì 2
n
-1
nút
5. Mt cây nh phân hoàn chnh chiu cao h có s
lượng nút nm trong khong 2
h-1
đến 2
h
1
6. Trong mt cây nh phân n
0
nút n
2
nút cp 2
thì ta n
0
= n
2
+ 1
)1(log
2
+
n
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 22
Đỗ Bích Dip - Khoa CNTT
Biu din cây nh phân
Biu din kế tiếp s dng mng
z Đánh s các nút trên cây theo trình t t m c 1, hết mc
này đến mc khác, t trái sang phi
z Lưu tr trong vector lưu tr V theo nguyên tc phn t V[i]
s lưu thông tin ca nút được đánh s i
Đỗ Bích Dip - Khoa CNTT
Biu din cây nh phân
d
Cây cho trên được lưu tr trên vector lưu tr ưV nh sau
A
B
C
D E F G
I K
1
2 3
4 5 6 7
8 9
V[9]V[8]V[7]V[6]V[5]V[4]V[3]V[2]V[1]
KIGFEDCBA
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 23
Đỗ Bích Dip - Khoa CNTT
Biu din cây nh phân
z Cách lưu tr kế tiếp phù hp để lưu tr cây nh phân gn
đầy hoc đầy đủ
z Vi các d ng khác th dn đến lãng phí b nh
A
C
G
F
1
2
4
8
V[8]V[7]V[6]V[5]V[4]V[3]V[2]V[1]
8FCA
Đỗ Bích Dip - Khoa CNTT
Biu din cây nh phân
z Biu din móc ni s dng con tr
Mi nút trên cây được lưu tr bi mt phn t quy cách
như sau
z INFO: cha d liu ca nút
z LPTR: cha địa ch ca nút gc ca cây con trái
z RPTR: cha địa ch ca nút gc ca cây con phi
Cn nm m t con tr T tr t i nút g c ca cây. Nếu cây
rng thì T = NULL
RPTRINFOLPTR
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 24
Đỗ Bích Dip - Khoa CNTT
Biu din cây nh phân
A
B
C
D E F
K
A
B C
D E F
K
T
Đỗ Bích Dip - Khoa CNTT
Biu din cây nh phân
struct Tnode{
int info;
struct Tnode * lptr;
struct Tnode * rptr;
} ;
typedef struct Tnode TREENODE;
typedef TREENODE *TREENODEPTR;
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 25
Đỗ Bích Dip - Khoa CNTT
Duyt cây nh phân
Phép duy phânt cây nh
z Phép duyt m t cây phép “thăm” l n lượt các nút trên
cây đó sao cho mi nút ch đưc thăm mt ln
z Tn t i 3 phép duy t khác nhau đối vi 1 cây nh phân
Duyt cây theo th t trước
Duyt cây theo th t gia
Duyt cây theo th t sau:
Đỗ Bích Dip - Khoa CNTT
Duyt cây nh phân
d: Thc hi n duy t cây
z Duyt theo th t trước
A B D H E I J C F G K
z Duyt theo th t gia
H D B I E J A F C K G
z Duyt theo th t sau
H D I J E B F K G C A
A
B C
F
G
D
K
E
IH J
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT - ĐHBKHN 26
Đỗ Bích Dip - Khoa CNTT
Duyt cây nh phân theo th t trước
void PREORDER(TREENODEPTR tree) {
if (tree != NULL) {
printf(“%3d”, tree->info;
PREORDER(tree->lptr);
PREORDER(tree->rptr);
}
}
Đỗ Bích Dip - Khoa CNTT
Duyt cây nh phân
d 2: Cho cây nh phân biu din biu thc s hc sau,
hãy đưa ra dãy các nút được thăm khi thc hin các phép
duyt theo th t trước, gia sau. Nhn xét v các dãy
thu được
+
- ^
/ 2x *
4 y y
z
| 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 tu ế y 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 My Music (C:) (D:) Files
Đỗ 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 - Đ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 đư n ơ g B E C F G D H I
Đỗ Bích Diệp - Khoa CNT 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 Algorithm preOrder
theo một thứ tự nhất định, ỗ m i nút (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ệ preOrder(w) của nó 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ệ preOrder của nó (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 Algorithm preOrder
theo một thứ tự nhất định, ỗ m i nút (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ệ ⇒ preOrder(w) của nó 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 Algorithm preOrder
theo một thứ tự nhất định, ỗ m i nút (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ệ preOrder(w) của nó 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 Algorithm preOrder
theo một thứ tự nhất định, ỗ m i nút (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ệ ⇒ preOrder(w) của nó 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ệ preOrder của nó (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ệ preOrder của nó (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 2. C 3. D tiếp theo 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ệ ⇒ preOrder của nó (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ệ preOrder của nó (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ệ preOrder của nó (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ệ preOrder của nó (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ệ ⇒ preOrder của nó (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ệ preOrder của nó (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 visit của các tệp trong ộ m t thư mục và (v) các thư mục con của 9 cs16/ 8 3 7 todo.txt homeworks/ 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 inOrder(left_most_child(v)) con tiếp theo visit(v) for each child w of v (w is not the left most ch ild) 4 cs16/ inOrder(w) 9 2 6 todo.txt homeworks/ 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 C A D 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 Đỗ I J K ch Diệp - hoa C TT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 20
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 nhị phân hoàn chỉnh
– Là cây nhị phân gần đầy
– Tất cả các nút ở mức cuối cùng đều lệch về bên trái nhất có thể A B C D E F G H L I J K z Cây nhị phân cân đối
z Cây con trái và cây con phải lệ Đ c ỗ h Bí n c h h a D u iệ k p h - ô K n h goa q C u N á TT 1 đơn vị
Tính chất của Cây nhị phân
1. Số lượng tối đa của các nút ở mức i trên một cây
nhị phân là 2i-1 (i >= 1)
2. Số lượng tối đa các nút trên một cây nhị phân có
chiều cao là h là 2h – 1 (h >= 1)
3. Một cây nhị phân có n nút có chiều cao tối thiểu là ⎡log (n+ ) 1 2 ⎤
4. Một cây nhị phân đầy đủ có độ sâu n thì có 2n -1 nút
5. Một cây nhị phân hoàn chỉnh có chiều cao h có số
lượng nút nằm trong khoảng 2h-1 đến 2h – 1
6. Trong một cây nhị phân có n nút lá và n nút cấp 2 0 2 thì ta có n = n + 1 0 2
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 21
Cấu trúc dữ liệu và Giải thuật
Biểu diễn cây nhị phân
– Biểu diễn kế tiếp sử dụng mảng
z Đánh số các nút trên cây theo trình tự từ mức 1, hết mức
này đến mức khác, từ trái sang phải
z Lưu trữ trong vector lưu trữ V theo nguyên tắc phần tử V[i]
sẽ lưu thông tin của nút được đánh số i
Đỗ Bích Diệp - Khoa CNTT
Biểu diễn cây nhị phân – Ví dụ 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 I 9 K
– Cây cho ở trên được lưu trữ trên vector lưu trữ V n ư h sau A B C D E F G I K V[1] V[2] V[3] V[4] V[5] V[6] V[7] V[8] V[9]
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 22
Cấu trúc dữ liệu và Giải thuật
Biểu diễn cây nhị phân
z Cách lưu trữ kế tiếp phù hợp để lưu trữ cây nhị phân gần đầy hoặc đầy đủ
z Với các dạng khác có thể dẫn đến lãng phí bộ nhớ 1 A A C F 8 2 C V[1] V[2] V[3] V[4] V[5] V[6] V[7] V[8] 4 F 8 G
Đỗ Bích Diệp - Khoa CNTT
Biểu diễn cây nhị phân
z Biểu diễn móc nối sử dụng con trỏ
– Mỗi nút trên cây được lưu trữ bởi một phần tử có quy cách như sau LPTR INFO RPTR
z INFO: chứa dữ liệu của nút
z LPTR: chứa địa chỉ của nút gốc của cây con trái
z RPTR: chứa địa chỉ của nút gốc của cây con phải
– Cần nắm một con trỏ T trỏ tới nút ố g c của cây. Nếu cây rỗng thì T = NULL
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 23
Cấu trúc dữ liệu và Giải thuật
Biểu diễn cây nhị phân T A A B B C C D E F D E F K K
Đỗ Bích Diệp - Khoa CNTT
Biểu diễn cây nhị phân struct Tnode{ int info; struct Tnode * lptr; struct Tnode * rptr; } ; typedef struct Tnode TREENODE;
typedef TREENODE *TREENODEPTR;
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 24
Cấu trúc dữ liệu và Giải thuật
Duyệt cây nhị phân
– Phép duyệt cây nhị phân
z Phép duyệt một cây là phép “thăm” ầ l n lượt các nút trên
cây đó sao cho mỗi nút chỉ được thăm một lần
z Tồn tại 3 phép duyệt khác nhau đối với 1 cây nhị phân
– Duyệt cây theo thứ tự trước
– Duyệt cây theo thứ tự giữa
– Duyệt cây theo thứ tự sau:
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây nhị phân – Ví dụ: Thực hiện du ệ y t cây
z Duyệt theo thứ tự trước A A B D H E I J C F G K B C
z Duyệt theo thứ tự giữa H D B I E J A F C K G E F G D z Duyệt theo thứ tự sau H D I J E B F K G C A H I J K
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 25
Cấu trúc dữ liệu và Giải thuật
Duyệt cây nhị phân theo thứ tự trước
void PREORDER(TREENODEPTR tree) { if (tree != NULL) {
printf(“%3d”, tree->info; PREORDER(tree->lptr); PREORDER(tree->rptr); } }
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây nhị phân
– Ví dụ 2: Cho cây nhị phân biểu diễn biểu thức số học sau,
hãy đưa ra dãy các nút được thăm khi thực hiện các phép
duyệt theo thứ tự trước, giữa và sau. Nhận xét về các dãy thu được + - ^ x * / 2 4 y y z
Đỗ Bích Diệp - Khoa CNTT
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 26