Professional Documents
Culture Documents
5.CayPhanCap Python
5.CayPhanCap Python
5.CayPhanCap Python
Chương 5.
Cấu trúc cây phân cấp
TS. Hoàng Thị Thanh Hà
Khoa Thống kê – Tin học
Nội dung
1. Giới thiệu
2. Các cách duyệt cây
3. Cây nhị phân
4. Biểu diễn cây
1
4/17/2022
1. GIỚI THIỆU
Ví dụ Computer Company
Europe Asia US
root
T1 T2 Tn
2
4/17/2022
3
4/17/2022
T1 T2 Tk
4
4/17/2022
10
5
4/17/2022
11
2 3 4
5 6 7 8
9 10
12
6
4/17/2022
13
14
7
4/17/2022
15
16
8
4/17/2022
17
18
9
4/17/2022
Duyệt cây biểu thức trên theo thứ tự sau, ta được danh
sách: a b + c d - *
4/17/2022 19
b c c c-d
a b + c d - *
4/17/2022 20
10
4/17/2022
4/17/2022 21
Bài toán
Cho một tập các ký hiệu. Hãy mã hóa các ký hiệu này
bằng dãy các chữ số 0, 1 thoả mãn tính chất tiền tố,
nghĩa là không có mã của ký hiệu nào lại là tiền tố của
mã của ký hiệu khác.
22
11
4/17/2022
23
0 1
0
1 1
0 1 0
0 1 0
c d e
1 0 0
0 1 0 1
kiểu dữ liệu trừu tượng cây
a b c d e a b
24
12
4/17/2022
4. Biểu diễn cây tổng quát bằng cây nhị phân (1)
4. Biểu diễn cây tổng quát bằng cây nhị phân (2)
13
4/17/2022
4. Biểu diễn cây tổng quát bằng cây nhị phân (3)
B C D E C
F H D
E F G H I J
G I
4. BIỂU DIỄN CÂY TỔNG QUÁT BẰNG CÂY NHỊ PHÂN (4)
Ví dụ:
28
14
4/17/2022
15
4/17/2022
F/5 G/6
A B C D E F G H I … Nhãn
-1 0 0 1 1 4 4 2 2 … Nút cha
0 1 2 3 4 5 6 7 8 … Chỉ số mảng
Class treeNode:
def __init__(self):
Data=[] // lưu nhãn
NodeParent=[] // lưu nút cha
Size=0 // số nút của cây
T= treeNode()
16
4/17/2022
def EmptyTree(T):
return T. Size == 0
}
17
4/17/2022
18
4/17/2022
19
4/17/2022
5. Biểu diễn cây tổng quát bằng cây nhị phân (1)
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
element
left child right sibling
20
4/17/2022
5. Biểu diễn cây tổng quát bằng cây nhị phân (2)
class Node:
….
5. Biểu diễn cây tổng quát bằng cây nhị phân (1)
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
Root=Node(10)
Root.addLeft(34)
Root.addRight(89)
Root.left.addLeft(45)
Root.addRight(89)
Root.left.addRight(50)
21
4/17/2022
5. Biểu diễn cây tổng quát bằng cây nhị phân (3)
5. Biểu diễn cây tổng quát bằng cây NP: Duyệt theo thứ tự trước
Kiểu duyệt này trước tiên thăm nút gốc sau đó thăm
các nút của cây con trái rồi đến cây con phải.
def NLR(root)
if (Root != None):
print(root.data)
NLR(root.left)
NLR(root.right)
22
4/17/2022
5. Biểu diễn cây tổng quát bằng cây NP (5): Duyệt theo thứ tự giữa
Kiểu duyệt này trước tiên thăm các nút của cây con
trái sau đó thăm nút gốc rồi đến cây con phải.
def LNR(root)
if (Root != None):
LNR(root.left)
print(root.data)
LNR(root.right)
5. Biểu diễn cây tổng quát bằng cây nhị phân (6)
Duyệt theo thứ tự sau (Left-Right-Node)
Kiểu duyệt này trước tiên thăm các nút của cây con trái sau đó thăm đến
cây con phải rồi cuối cùng mới thăm nút gốc.
def LRN(root)
if (Root != None):
LRN(root.left)
LRN(root.right)
print(root.data)
23
4/17/2022
5. Biểu diễn cây tổng quát bằng cây nhị phân (7)
Một cách biểu diễn cây nhị phân khác
24