Kỹ Thuật - Công Nghệ - Kinh tế - Thương mại - Khoa Học - Science FIT-HCMUS 1 Giảng viên: Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến Cấu trúc dữ liệu và giải thuật - HCMUS 2011 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 FIT-HCMUS 2 Cấu trúc dữ liệu và giải thuật - HCMUS 2011 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 … FIT-HCMUS 3 Cấu trúc dữ liệu và giải thuật - HCMUS 2011 5 a b d i j o p k q e f c g l m h n Cấu trúc dữ liệu và giải thuật - HCMUS 2011 6 Sơ đồ tổ chức Cây thư mục FIT-HCMUS 4 Cấu trúc dữ liệu và giải thuật - HCMUS 2011 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 r1 T1 r2 T2 rk Tk Nút gốc Cây con FIT-HCMUS 5 Cấu trúc dữ liệu và giải thuật - HCMUS 2011 9 node: đỉnh root: gốc cây leaf: lá inner nodeinternal 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 r1 T1 r2 T2 rk Tk Nút gốc Cây con Nút lá k1 k2 k5k4k3 k6 Đường đi FIT-HCMUS 6 Cấu trúc dữ liệu và giải thuật - HCMUS 2011 11 degreeorder: 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 depthlevel: độ sâumứ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: ...
Trang 1Giả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
Trang 2Cấu trúc dữ liệu và giải thuật - HCMUS 2011
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
Trang 3Cấu trúc dữ liệu và giải thuật - HCMUS 2011
5
a b
d
k q
c g
h n
6
Trang 4Cấu trúc dữ liệu và giải thuật - HCMUS 2011
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 T 1, T 2, … T k (k ≥ 1) là các cây không cắt nhau có gốc tương ứng r 1, r 2, … r k
Giả sử r là một đỉnh mới không thuộc các cây T i Khi đó,
tập hợp T gồm đỉnh r và các cây T i tạo thành một cây
mới với gốc r Các cây T 1, T 2, … T k đượ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
r1
T1
r2
T2
rk
Tk
Nút gốc
Cây con
Trang 5Cấu trúc dữ liệu và giải thuật - HCMUS 2011
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
10
r1
T1
r2
T2
rk
Tk
Nút gốc
Cây con
Nút lá
k5
k4
k3
Trang 6Cấu trúc dữ liệu và giải thuật - HCMUS 2011
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
r1
T1
r2
T2
rk
Tk
Nút gốc
Cây con
Nút lá
Độ cao = 4 Bậc = k
k5
k4
k3
k6
Bậc = 2
Đường đi
Trang 7Cấu trúc dữ liệu và giải thuật - HCMUS 2011
13
14
một cách có hệ thống.
phép duyệt cây.
Duyệt trước (Pre-order)
Duyệt giữa (In-order)
Duyệt sau (Post-order)
Trang 8Cấu trúc dữ liệu và giải thuật - HCMUS 2011
Tìm cha một đỉnh.
• Parent(x)
Tìm đỉnh con trái nhất.
• EldestChild(x)
Tìm đỉnh kề phải.
• NextSibling(x)
h g
d
i
Eldest-Child(c) = g
NextSibling(g) = h
NextSibling(h)?
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
16
Duyệt trước
• a b d e i j c f g k h
Duyệt giữa
• d b i e j a f c k g h
Duyệt sau
• d i j e b f k g h c a
Duyệt theo chiều sâu
h f
d
k
Trang 9void Preorder(NODE A)
{
NODE B;
Visit(A);
B = EldestChild(A);
while (B != ) {
Preorder(B);
B = NextSibling(B);
} }
{
NODE B;
B = EldestChild(A);
Postorder(B);
B = NextSibling(B);
}
Visit(A);
}
17
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);
Inorder(B);
B = NextSibling(B);
}
Trang 10Cấu trúc dữ liệu và giải thuật - HCMUS 2011
Cấu trúc dữ liệu và giải thuật - HCMUS 2011
20
h f
d
k
info child
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
11 k
id next 2 4 6 9
11
5 7 10 3
8