Giảng viên:
Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến
2
Khái niệm
Phép duyệt cây và Biểu diễn cây
Cây nhị phân và Cây nhị phân tìm kiếm
Cây AVL
Cây AA
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
©FIT-HCMUS 1
3
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
4
Tree
Search tree
Binary search tree
Balanced tree
AVL tree
AA tree
Red-Black tree
…
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
©FIT-HCMUS 2
5
a
b c
d e f g h
i j k l m n
o p q
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
6
Sơ đồ tổ chức Cây thư mục
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
©FIT-HCMUS 3
7
Cây (cây có gốc) được xác định đệ quy như
sau:
1. Tập hợp gồm 1 đỉnh là một cây. Cây này có gốc là
đỉnh duy nhất của nó.
2. Gọi T1, T2, … Tk (k ≥ 1) là các cây khơng cắt nhau có
gốc tương ứng r1, r2, … rk.
Giả sử r là một đỉnh mới khơng thuộc các cây Ti. Khi đó,
tập hợp T gồm đỉnh r và các cây Ti tạo thành một cây
mới với gốc r. Các cây T1, T2, … Tk được gọi là cây
con của gốc r.
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
8
Nút gốc
r1 r2 rk
T1 T2 Tk
Cây con
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
©FIT-HCMUS 4
9
node: đỉnh
root: gốc cây
leaf: lá
inner node/internal node: đỉnh trong
parent: đỉnh cha
child: đỉnh con
path: đường đi
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
10
Nút gốc
r1 r2 rk
T1
Cây con k1 k2
T2 Tk
k3 k4 k5
Nút lá
Cấu trúc dữ liệu và giải thuật - HCMUS 2011 Đường đi k6
©FIT-HCMUS 5
11
degree/order: bậc
Bậc của node: Số con của node
Bậc của cây: bậc lớn nhất trong số các con
depth/level: độ sâu/mức
Mức (độ sâu)của node: Chiều dài của đường đi từ node
gốc đến node đó cộng thêm 1.
height: chiều cao
Chiều cao cây:
Cây rỗng: 0
Cây khác rỗng: Mức lớn nhất giữa các node của cây
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
12 Nút gốc
Độ cao = 4
Bậc = k
Bậc = 2
r1 r2 rk
T1
Cây con k1 k2
T2 Tk
k3 k4 k5
Nút lá
Cấu trúc dữ liệu và giải thuật - HCMUS 2011 Đường đi k6
©FIT-HCMUS 6
13
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
14
Đảm bảo đến mỗi node trên cây chính xác một lần
một cách có hệ thống.
Nhiều thao tác xử lý trên cây cần phải sử dụng đến
phép duyệt cây.
Các phép cơ bản:
Duyệt trước (Pre-order)
Duyệt giữa (In-order)
Duyệt sau (Post-order)
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
©FIT-HCMUS 7
15
Parent(a)?
Tìm cha một đỉnh. Parent(b) = a Eldest-
Child(c) = g
• Parent(x)
b c
Tìm đỉnh con trái nhất.
d e f g h
• EldestChild(x)
NextSibling(g) = h
Tìm đỉnh kề phải.
i
• NextSibling(x)
Cấu trúc dữ liệu và giải thuật - HCMUS 2011 NextSibling(h)?
16 Duyệt theo chiều sâu
Duyệt trước b c
• abdeijcfgkh d e f g h
Duyệt giữa i j k
• dbiejafckgh
Duyệt sau
• dijebfkghca
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
©FIT-HCMUS 8
17
Pre-order Post-order
void Preorder(NODE A) void Postorder(NODE A)
{ {
NODE B; NODE B;
Visit(A);
B = EldestChild(A); B = EldestChild(A);
while (B != ) { while (B != ) {
Preorder(B); Postorder(B);
B = NextSibling(B); B = NextSibling(B);
} }
Visit(A);
} }
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
18
In-Order
void Inorder(NODE A)
{
NODE B;
} B = EldestChild(A);
if (B != ) {
Inorder(B);
B = NextSibling(B);
}
Visit(A);
while (B != ) {
Inorder(B);
B = NextSibling(B);
}
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
©FIT-HCMUS 9
19
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
20
info child id next
1a 2 3
2b 4 5
3c 6 7 8
4d
5e 9 10
6f b c
7g 11
8h d e f g h
9i
10 j
11 k i j k
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
©FIT-HCMUS 10