Tải bản đầy đủ (.pdf) (30 trang)

slike bài giảng cấu trúc dữ liệu và giải thuật - đỗ bích diệp chương 5 cấu trúc cây

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (394.71 KB, 30 trang )

Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 1
Cấutrúcdữ liệuvàGiảithuật
Chương IV: Cấu trúc Cây
Đỗ Bích Diệp - Khoa CNTT
CấutrúcCâ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ểudiễncâytổng quát
3. Duyệtcâytổng quát
3. Cây nhị phân
1. Định nghĩavàtínhchất
2. Duyệt cây nhị phân
3. Biểudiễn cây nhị phân
4. Ứng dụng củacấu trúc cây cho cây biểuthức
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 2
Đỗ Bích Diệp - Khoa CNTT
Định nghĩaCây
− Cây là mộtcấu trúc phi tuyến, thiếtlậptrênmột
tậphữuhạn các “nút”
– Tồntạimộtnútđặcbiệtgọilà“gốc” (root)
– Giữa các nút tồntạimột quan hệ phân cấp hay gọi
là quan hệ cha con
– Mộtnúttrừ nút gốcchỉ có mộtcha
– Mộtnútcóthể có từ 0 đếnn con
Đỗ Bích Diệp - Khoa CNTT
Định nghĩaCây
z Định nghĩa đệ quy về


Cây
– Mộtnúttạo thành một
cây.
– Nếucón câyT
1
, T
2
, …,
T
n
tách biệt có các nút
gốclầnlượtlàr
1
, r
2
, … ,
r
n
; r là một nút có quan
hệ cha-con vớir
1
, r
2
, … ,
r
n
thì tồntạimộtcâymới
T nhậnr làmgốc.
r
rnr2r1

T1
T2
Tn
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 3
Đỗ Bích Diệp - Khoa CNTT
Ví 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ư mụctrongmáytính
Đỗ Bích Diệp - Khoa CNTT
Ví dụ Cây
Cây phân cấpchứcnăng hệ thống thông tin
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 4
Đỗ Bích Diệp - Khoa CNTT
Ví dụ Cây

Cây mụclụcSách
Đỗ Bích Diệp - Khoa CNTT
Các thuậtngữ liên quan đến cây
– Cấp (Degree) củamột nút và củacây
z Cấpcủamột nút là số các con củanútđó
z Cấpcủamộtcâylàcấpcaonhấtcủamột 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
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 5
Đỗ Bích Diệp - Khoa CNTT
Các thuậtngữ 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

là nút cha củan
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 Diệp - Khoa CNTT
Các thuậtngữ liên quan đến cây
z Độ sâu hay mức (Depth – Level ) củanút
– Độ dài đường đitừ gốc đếnnútđó+ 1
A
JH
DCB
E F G I K
L M N
Depth 1
Depth 2
Depth 3
Depth 4
P
Cấu trúc dữ liệu và Giải thuật

Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 6
Đỗ Bích Diệp - Khoa CNTT
Các thuậtngữ liên quan đến cây
z Độ cao (Height) củanút
– Độ dài đường đi dài nhấttừ nút đó đến 1 nút lá trong cây +
1
– Chiềucaocủa cây là chiềucaocủa nút gốccủacâyđó
A
JH
DCB
E F G I K
L M NP
Height = 1
Height = 2
Height =3
Height =4
Đỗ Bích Diệp - Khoa CNTT
Các thuậtngữ liên quan đến cây
z Tổ tiên (Ancestor): A,C, G là tổ tiên củaM
z Hậuduệ (descendants): E, F, G, H, L,M …đềulàhậuduệ củaA
z Anh em (siblings): E, F là mộtcặp anh em ; L, N là mộtcặp anh
em
A
JH
D
CB
E F G I K
L M NP
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 7

Đỗ Bích Diệp - Khoa CNTT
Các thuậtngữ liên quan đến cây
z Rừng là mộttậphợphữuhạ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 Diệp - Khoa CNTT
Các thao tác cơ bảntrênCây
– Cácthaotáctruynhậpcây
z root() : trả ra nút gốccủacâ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ựctráicủa nút p
z right_most_child(Tree T, Node p) : trả ra nút con cựcphảicủ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ảicủ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);
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 8
Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây tổng quát

– Dựatrê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 đượcbiểudiễnbằng một danh sách tuyếntính
trong đónútthứ i sẽ chứamột thành phầnthamchiếu
đến cha củanó
z Nếu dùng mảng, A[i] = j nếuj làcha của nút i ; nếui là
gốc 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 Diệp - Khoa CNTT
Biểudiễ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ợpsử dụng danh sách móc nối, các nút
đầu danh sách đượclưu trong mộtmảng
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 9

Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây tổng quát
– Dựa 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 Diệp - Khoa CNTT
Biểudiễn cây tổng quát
– Thông qua mộtcâycấp2
z Vớimộ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ựctráicủanó(con cả)
– Quan hệ 1-1 giữa nút đóvànútemkế cận bên phảicủanó
z Dựa vào nhận định này, ngườitabiểudiễn đượcmộtcây
tổng quát dướidạng một cây nhị phân gọilà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
RSIBLINGINFOLCHILD
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 10
Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây tổng quát
z Ví dụ:
– Cây tổng 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 Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước
z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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

Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 11
Đỗ Bích Diệp - Khoa CNTT
Duyệt 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 Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
Đỗ Bích Diệp - Khoa CNTT
Duyệt 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 Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 12
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước

z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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 Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước

z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 13
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước


z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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 Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước
Thăm nút con
tiếptheo
z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó

z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 14
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước

z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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 Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước

z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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

Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 15
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước
Không còn con
Quay lại nút gốc
z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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 Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước
z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút

thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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ếptheocủagốc
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 16
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước
z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó

z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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 Diệp - Khoa CNTT
Duyệt cây theo thứ tự trước
z Duyệtcâylàthăm các nút trên cây
theo mộtthứ tự nhất định, mỗi nút
thăm1 lần
z Khi duyệt theo thứ tự trước, một nút
sẽ đượcthămtrướccáchậuduệ
củanó
z Ứng dụng: In ra các mụclụccủa
mộttàiliệu
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
Và tiếptụcnhư vậy….
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 17
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây theo thứ tự sau
z Duyệt theo thứ tự sau thì một nút
sẽ đượcthămsaucáchậuduệ
củanó
z Ứng dụng: Xác định kích thước
củacáctệp trong mộtthư mụcvà
các thư mục con của
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 Diệp - Khoa CNTT
Duyệt cây theo thứ tự giữa
z Duyệt theo thứ tự giữathìmột nút
sẽ đượcthămsaucáchậuduệ
củanótrongcâycon cựctráivà
trướccáchậuduệ 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
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 18
Đỗ Bích Diệp - Khoa CNTT
Cây nhị phân ( Binary Tree)
– Là cây mà mọi nút trên cây chỉ có tối đalà2 con.
z Cây con củamộtnútcũng cầnphải đượcphânbiệtrõ
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 Diệp - Khoa CNTT
Ví dụ cây nhị phân
– Cây biểuthứcsố họcvới các phép toán 2 ngôi
+
- /
x
z
x
*
3 y
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 19
Đỗ Bích Diệp - Khoa CNTT
Ví 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 Diệp - Khoa CNTT
Ví dụ cây nhị phân
– Kếtquả thi đấumộtmônthể thao theo cặptạinhiều
vòng
H
A H
H
F
A
E
C
EA D B H G F
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 20
Đỗ Bích Diệp - Khoa CNTT
Các dạng đặcbiệtcủa cây nhị phân
z Cây suy biến (degenerate binary tree)
– Mỗi nút trong củacâ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)
Đỗ Bích Diệp - Khoa CNTT
Các dạng đặcbiệtcủa cây nhị phân
z Cây nhị phân đầy đủ (full
binary tree)
– Mỗi nút trong củacâyđều
có đầy đủ 2 con
z Cây nhị phân gần đầy
– Ở mứccuối cùng không
có đầy đủ các nút
A
B C
E
F
D G
A
B C
F
G
D
K
E
IH J
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 21

Đỗ Bích Diệp - Khoa CNTT
Các dạng đặcbiệtcủ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ấtcả các nút ở mứccuối cùng đềulệch về bên trái nhấtcóthể
z Cây nhị phân cân đối
z Cây con trái và cây con phảilệch nhau không quá 1 đơnvị
A
B C
F G
D E
IH JL K
Đỗ Bích Diệp - Khoa CNTT
Tính chấtcủaCâynhị phân
1. Số lượng tối đacủa các nút ở mứci trênmộtcây
nhị phân là 2
i-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à 2
h
– 1 (h >= 1)
3. Một cây nhị phân có n nút có chiềucaotốithiểulà
4. Một cây nhị phân đầy đủ có độ sâu n thì có 2
n
-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 2
h-1

đến2
h
–1
6. Trong mộtcâynhị phân có n
0
nút lá và n
2
nút cấp2
thìtacón
0
= n
2
+ 1


)1(log
2
+
n
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 22
Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây nhị phân
– Biểudiễnkế tiếpsử dụng mảng
z Đánh số các nút trên cây theo trình tự từ mức1, hếtmức
này đếnmứckhác, từ trái sang phải
z Lưutrữ trong vector lưutrữ V theo nguyên tắcphầntử V[i]
sẽ lưu thông tin của nút được đánh số i
Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây nhị phân

– Ví dụ
– Cây cho ở trên đượclưutrữ trên vector lưutrữ V như sau
A
B
C
D E F G
I K
1
23
4567
89
V[9]V[8]V[7]V[6]V[5]V[4]V[3]V[2]V[1]
KIGFEDCBA
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 23
Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây nhị phân
z Cách lưutrữ kế tiếp phù hợp để lưutrữ cây nhị phân gần
đầyhoặc đầy đủ
z Vớicácdạng khác có thể dẫn đế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]
8

FCA
Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây nhị phân
z Biểudiễnmócnốisử dụng con trỏ
– Mỗi nút trên cây đượclưutrữ bởimộtphầntử có quy cách
như sau
z INFO: chứadữ liệucủanút
z LPTR: chứa địachỉ của nút gốccủa cây con trái
z RPTR: chứa địachỉ của nút gốccủa cây con phải
– Cầnnắmmột con trỏ T trỏ tới nút gốccủacây. Nếucây
rỗng thì T = NULL
RPTRINFOLPTR
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 24
Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây nhị phân
A
B
C
D E F
K
A
B C
D E F
K
T
Đỗ Bích Diệp - Khoa CNTT
Biểudiễn cây nhị phân
struct Tnode{
int info;

struct Tnode * lptr;
struct Tnode * rptr;
} ;
typedef struct Tnode TREENODE;
typedef TREENODE *TREENODEPTR;
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN 25
Đỗ Bích Diệp - Khoa CNTT
Duyệt cây nhị phân
– Phép duyệt cây nhị phân
z Phép duyệtmột cây là phép “thăm” lầnlượt các nút trên
cây đósaochomỗi nút chỉđượcthămmộtlần
z Tồntại 3 phép duyệt khác nhau đốivới1 câynhị 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ựchiện duyệtcây
z Duyệttheothứ tự trước
A B D H E I J C F G K
z Duyệttheothứ tự giữa
H D B I E J A F C K G
z Duyệttheothứ tự sau
H D I J E B F K G C A
A
B C
F
G
D

K
E
IH J

×