Chương 4: Cây - Cấu trúc dữ liệu và giải thuật (ET2100) | Trường Đại học Bách khoa Hà Nội

Câygồmmộttậpcácnút,có1nút đặcbiệtgọilàgốc(root) vàcác cạnhnốicácnút.

lOMoARcPSD| 27879799
1
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Cấu trúc dữ liệu và thuật toán
NguyễnKhánhPhương
Computer Science department
School of Informaon and Communicaon technology
E-mail: phuongnk@soict.hust.edu.vn
Nội dung khóa học
Chương 1. Các khái niệm cơ bản
Chương 2. Các sơ ồ thuật toán
Chương 3. Các cấu trúc dữ liệu cơ bản
Chương 4. Cây
Chương 5. Sắp xếp
Chương 6. Tìm kiếm
Chương 7. Đồ th
2
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
lOMoARcPSD| 27879799
2
Chương 4. Cây
NguyễnKhánhPhương
Computer Science department
School of Informaon and Communicaon technology
E-mail: phuongnk@soict.hust.edu.vn
Nội dung
1. Định nghĩa và các khái niệm
2. Biểu diễn cây
3. Duyệt cây
4. y nhị phân
4
Nội dung
lOMoARcPSD| 27879799
3
1. Định nghĩa và các khái niệm
2. Biểu diễn cây
3. Duyệt cây
4. y nhị phân
5
1. Định nghĩa và các khái niệm
1.1. Định nghĩa
1.2. Các thuật ngữ
1.3. Cây có thứ tự (Ordered tree)
6
1. Định nghĩa và các khái niệm
lOMoARcPSD| 27879799
4
1.1. Định nghĩa
1.2. Các thuật ngữ
1.3. Cây có thứ tự (Ordered tree)
7
y: Định nghĩa ệ quy
8
Nútgốc
lOMoARcPSD| 27879799
5
ớc cơ sở:
Cây rỗng: cây không có nút nào
Cây có 1 nút r : nút r ược gọi là gốc của cây
ớc quy:
Giả sử T
1
,T
2
,...,T
k
là các cây với gốc tương ứng là r
1
,r
2
,...,r
k
Ta có thể xây dựng cây mới bằng cách ặt nút r làm cha (parent) của các nút
r
1
,r
2
,....,r
k
:
Trong cây mới này: r là gốc; T
1
, T
2
, . . . , T
k
là các cây con của gốc r; Các nút r
1
,r
2
,....,r
k
ược gọi là con
(children) của
nút r.
Các ứng dụng của y
Lịch thi ấu
y gia phả
y thư mục
Cấu trúc của 1 quyển sách
y biểu thức
ồ phân cấp của 1 cơ quan • ….
Các ứng dụng của y: Biểu ồ lịch thi ấu
9
Gốc (Root)
lOMoARcPSD| 27879799
6
Trong ời thường, cây thường ược sử dụng ể mô tả lịch thi
u của các giải thể thao theo thể thc ầu loại trực tếp
Các ứng dụng của y: Cây gia phả
• Cây gia phả của các nhà toán học dòng họ Bernoulli
Jacob I
1654-1705
Nikolaus II
1695-1726
Các ứng dụng của y: Cây thư mục
lOMoARcPSD| 27879799
7
• Cây thư mục
Các ứng dụng của y: Mục lục 1 quyển sách
Các ứng dụng của cây: Cây gia phả ngược (Ancestor Tree)
lOMoARcPSD| 27879799
8
• Mỗi người đều có bố mẹ:
Ví dụ: Chiến có cha mẹ là: Thanh và Mai
Các ứng dụng của y: Cây biểu thức
1/3 + 6*7 / 4
Các ứng dụng của cây: Sơ ồ tchức của cơ quan
1
3
7
6
4
lOMoARcPSD| 27879799
9
NGUYỄN KHÁNH PHƯƠNG KHMT –
SOICT - ĐHBK HN
1. Định nghĩa và các khái niệm
1.1. Định nghĩa
1.2. Các thuật ngữ
1.3. Cây có thứ tự (Ordered tree)
18
1.2. Các thuật ngữ
lOMoARcPSD| 27879799
10
Nút (node)
Gốc (Root)
Lá (leaf)
Con (child)
Cha (Parent)
Tổ ên (Ancestors)
Hậu duệ (Descendants)
Anh em (Sibling)
Nút trong (Internal node)
Chiều cao (Height)
Chiều sâu (Depth)
NGUYỄN KHÁNH PHƯƠNG
KHMT – SOICT - ĐHBK HN
1.2. Các thuật ng
Gốc: nút không có cha (ví dụ: nút A)
Anh em: nút có cùng cha (ví dụ: B, C, D là anh em; I, J, K là anh em; E và F là anh
em; G và H là anh em)
Nút trong: nút có ít nhất 1 con (ví dụ: các nút màu xanh dương: A, B, C, F)
Nút ngoài (lá ): nút không có con (ví dụ: các nút xanh lá: E, I, J, K, G, H, D)
Tổ ên của 1 nút: là các nút cha / ông bà / cụ.. của nút ó.
Hậu duệ của 1 nút: là các nút con/cháu/chắt… của nút ó
Cây con của 1 nút: là cây có gốc là con của nút ó
Ví dụ:
Con của B:
E, F
Cha của E:
B
Tổ ên của F:
B, A
Hậu duệ của B:
E, F, I, J, K
1.2. Các thuật ng
Cây con của nút A
lOMoARcPSD| 27879799
11
Đường i (Path): là 1 dãy các nút và các cạnh nối 1 nút ến 1 hậu duệ của nó
Độ dài (Length) của ường i = số ợng cạnh trên ường i = số ợng nút trên ường i
- 1
(Ví dụ: Độ dài ường i (A C E) = 2; ộ dài ường i (C F) = 1)
Như vậy, ường i ộ dài 0 là ường i từ 1 nút ến chính nó
Độ sâu/mức (Depth/level) của 1 nút N = 1 + ộ dài ường i từ gốc ến nút N
Chiều cao (Height) của nút N = 1 + ộ dài ường i dài nhất từ N ến lá
Chiều cao (sâu) của cây = chiều cao của gc (= chiều cao lớn nhất của tất cả các nút trên cây)
1.2. Các thuật ng
Chiều cao của cây= 3
sâu=1
sâu=2
sâu=2
sâu=2
sâu=3
sâu=3
lOMoARcPSD| 27879799
12
Bậc (Degree) của 1 nút: số ợng nút con của nút ó (= số ợng cây con của
nút ó)
Bậc (Degree) của 1 cây: bậc lớn nhất của tt cả các nút trên cây
NGUYỄN KHÁNH PHƯƠNG
KHMT – SOICT - ĐHBK HN
Bài tập: Các thuộc nh của cây
Thuộc nh
1) Số nút
2) Nút gốc
3) Các nút lá
4) Các nút trong
5) Tổ ên của H
6) Con cháu của B
7) Anh em của E
8) Cây con phải của A
9) Cây con trái của A
10) Chiều cao của cây
11) Bậc của cây
Giá trị
NGUYỄN KHÁNH PHƯƠNG
KHMT – SOICT - ĐHBK HN
How we view a tree
Bậc = 2
2
3
0
0
3
0
0
0
0
0
Bậc của cây = ?
G
H
lOMoARcPSD| 27879799
13
root
root
Nature Lovers View Computer Sciensts View
25
1. Định nghĩa và các khái niệm
1.1. Định nghĩa
1.2. Các thuật ngữ
1.3. Cây có thứ tự (Ordered tree)
26
1.3. Cây có thứ tự (Ordered tree)
lOMoARcPSD| 27879799
14
y có thứ tự là cây mà các nút ược sắp xếp theo thứ tự
Ví dụ: Nếu T
1
và T
2
là cây có thứ tự thì T
1
≠ T
2
; nếu không T
1
= T
2
T
1
T2
NGUYỄN KHÁNH PHƯƠNG 27 KHMT
– SOICT - ĐHBK HN
Nội dung
1. Định nghĩa và các khái niệm
2. Biểu diễn cây
3. Duyệt cây
4. Cây nhị phân
2. Biểu diễn cây
lOMoARcPSD| 27879799
15
• Một số cách cài ặt cây trên máy nh
Mảng
Danh sách các con (Lists of Children)
Con trái nhất, anh em bên phải (The Lemost-Child, Right-Sibling)
29
2. Biểu diễn cây: Mảng
Giả sử cây T có n nút, ược ánh số 1, 2, …, n.
Ta sử dụng 1 mảng A biểu diễn cây T như sau:
A[i] = j nếu nút j là cha của nút i
– Gốc của cây T không có cha, do ó A[1] = 0
A
A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
NGUYỄN KHÁNH PHƯƠNG 30
KHMT – SOICT - ĐHBK HN
0
1
1
2
2
3
6
6
6
3
2. Biểu diễn cây
lOMoARcPSD| 27879799
16
• Một số cách cài ặt cây trên máy nh
Mảng
Danh sách các con (Lists of Children)
Con trái nhất, anh em bên phải (The Lemost-Child, Right-Sibling)
NGUYỄN KHÁNH PHƯƠNG 31
KHMT – SOICT - ĐHBK HN
2. Biểu diễn cây
lOMoARcPSD| 27879799
17
• Một số cách cài ặt cây trên máy nh
Mảng
Danh sách các con (Lists of Children)
Con trái nhất, em kế cận bên phải (The Lemost-Child, RightSibling)
33
2. Biểu diễn cây : Con trái nhất, em kế cận bên phải
Mỗi nút trên cây, có thể:
Không có con nào, hoặc có duy nhất 1 con trái nhất
Không có anh em nào, hoặc có duy nhất 1 anh em bên phải
Ví dụ 1: nút B
Con trái nhất của B: E
Anh em bên phải của B: C
Ví dụ 2: nút C
Không có con
Con trái nhất của C:
Anh em bên phải của C: D
Ví dụ 3: nút I
Không có con
Không có anh em bên phải
34
2. Biểu diễn cây : Con trái nhất, em kế cận bên phải
lOMoARcPSD| 27879799
18
• Mỗi nút trên cây, có thể:
Không có con nào, hoặc có duy nhất 1 con trái nhất
Không có anh em nào, hoặc có duy nhất 1 anh em bên phải
Do ó, biểu diễn cây, ta sẽ lưu trữ các thông n về con trái nhất và anh em
bên phải của mỗi nút:
typedef struct
{ int data; // dữ liệu có trên mỗi nút
struct treeNode * con_trái_nhất; struct treeNode *
em_kế_cận_phải;
}treeNode; treeNode *
Root;
35
Data
Con trái nhất
Em kế cận phải
2. Biểu diễn cây : Con trái nhất, em kế cận bên phải
Mỗi nút trên cây, có thể:
Không có con nào, hoặc có duy nhất 1 con trái nhất
Không có anh em nào, hoặc có duy nhất 1 anh em bên phải
Do ó, biểu diễn cây, ta sẽ lưu trữ các thông n về con trái nhất và anh em
bên phải của mỗi nút:
struct treeNode
{ int data; // dữ liệu có trên mỗi nút
treeNode * con_trái_nhất; treeNode *
em_kế_cận_phải;
};
treeNode * Root;
NGUYỄN KHÁNH PHƯƠNG 36 KHMT
– SOICT - ĐHBK HN
Data
Con trái nhất
Em kế cận phải
lOMoARcPSD| 27879799
19
lOMoARcPSD| 27879799
20
Nội dung
1. Định nghĩa và các khái niệm
2. Biểu diễn cây
3. Duyệt cây
4. Cây nhị phân
3. Duyệt cây (Tree Traversal)
Có 3 phương pháp chính:
Thứ tự trước (Preorder):
Thăm nút gốc
Duyệt theo thứ tự trước các nút con (cây con)
Thứ tự sau (Postorder):
Duyệt các con (cây con) theo thứ tự sau
Thăm nút gốc
Thứ tự giữa (Inorder):
Duyệt con trái nhất (cây con trái nhất) theo thứ tự sau
Thăm nút gốc
Duyệt các con còn lại (không phải con trái nhất) theo thứ tự
sau
Duyt thứ tự trước (Preorder Traversal)
| 1/105

Preview text:

lOMoAR cPSD| 27879799
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Cấu trúc dữ liệu và thuật toán NguyễnKhánhPhương Computer Science department
School of Information and Communication technology
E-mail: phuongnk@soict.hust.edu.vn Nội dung khóa học
Chương 1. Các khái niệm cơ bản
Chương 2. Các sơ ồ thuật toán
Chương 3. Các cấu trúc dữ liệu cơ bản Chương 4. Cây Chương 5. Sắp xếp Chương 6. Tìm kiếm Chương 7. Đồ thị 2
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG 1 lOMoAR cPSD| 27879799 Chương 4. Cây NguyễnKhánhPhương Computer Science department
School of Information and Communication technology
E-mail: phuongnk@soict.hust.edu.vn Nội dung
1. Định nghĩa và các khái niệm 2. Biểu diễn cây 3. Duyệt cây 4. Cây nhị phân 4 Nội dung 2 lOMoAR cPSD| 27879799
1. Định nghĩa và các khái niệm 2. Biểu diễn cây 3. Duyệt cây 4. Cây nhị phân 5
1. Định nghĩa và các khái niệm 1.1. Định nghĩa 1.2. Các thuật ngữ
1.3. Cây có thứ tự (Ordered tree) 6
1. Định nghĩa và các khái niệm 3 lOMoAR cPSD| 27879799 1.1. Định nghĩa 1.2. Các thuật ngữ
1.3. Cây có thứ tự (Ordered tree) 7 Nútgốc 8 Cây: Định nghĩa ệ quy 4 lOMoAR cPSD| 27879799 • Bước cơ sở:
– Cây rỗng: cây không có nút nào
– Cây có 1 nút r : nút r ược gọi là gốc của cây • Bước ệ quy:
– Giả sử T1,T2,...,Tk là các cây với gốc tương ứng là r1,r2,...,rk
– Ta có thể xây dựng cây mới bằng cách ặt nút r làm cha (parent) của các nút r1,r2,....,rk :
• Trong cây mới này: r là gốc; T1, T2, . . . , Tk là các cây con của gốc r; Các nút r1,r2,....,rk ược gọi là con (children) của Gốc (Root) nút r. 9 Các ứng dụng của cây • Lịch thi ấu • Cây gia phả • Cây thư mục •
Cấu trúc của 1 quyển sách • Cây biểu thức •
Sơ ồ phân cấp của 1 cơ quan • ….
Các ứng dụng của cây: Biểu ồ lịch thi ấu 5 lOMoAR cPSD| 27879799
• Trong ời thường, cây thường ược sử dụng ể mô tả lịch thi
ấu của các giải thể thao theo thể thức ầu loại trực tếp
Các ứng dụng của cây: Cây gia phả
• Cây gia phả của các nhà toán học dòng họ Bernoulli Jacob I 1654-1705 Nikolaus II 1695-1726
Các ứng dụng của cây: Cây thư mục 6 lOMoAR cPSD| 27879799 • Cây thư mục
Các ứng dụng của cây: Mục lục 1 quyển sách
Các ứng dụng của cây: Cây gia phả ngược (Ancestor Tree) 7 lOMoAR cPSD| 27879799
• Mỗi người đều có bố mẹ:
Ví dụ: Chiến có cha mẹ là: Thanh và Mai
Các ứng dụng của cây: Cây biểu thức 4 1 3 6 7 1/3 + 6*7 / 4
Các ứng dụng của cây: Sơ ồ tổ chức của cơ quan 8 lOMoAR cPSD| 27879799
NGUYỄN KHÁNH PHƯƠNG KHMT – SOICT - ĐHBK HN
1. Định nghĩa và các khái niệm 1.1. Định nghĩa 1.2. Các thuật ngữ
1.3. Cây có thứ tự (Ordered tree) 18 1.2. Các thuật ngữ 9 lOMoAR cPSD| 27879799 • Nút (node) • Gốc (Root) • Lá (leaf) • Con (child) • Cha (Parent) • Tổ tiên (Ancestors) • Hậu duệ (Descendants) • Anh em (Sibling)
• Nút trong (Internal node) • Chiều cao (Height) • Chiều sâu (Depth) NGUYỄN KHÁNH PHƯƠNG KHMT – SOICT - ĐHBK HN 1.2. Các thuật ngữ
• Gốc: nút không có cha (ví dụ: nút A)
• Anh em: nút có cùng cha (ví dụ: B, C, D là anh em; I, J, K là anh em; E và F là anh em; G và H là anh em)
• Nút trong: nút có ít nhất 1 con (ví dụ: các nút màu xanh dương: A, B, C, F) •
Nút ngoài (lá ): nút không có con (ví dụ: các nút xanh lá: E, I, J, K, G, H, D)
• Tổ tiên của 1 nút: là các nút cha / ông bà / cụ.. của nút ó.
• Hậu duệ của 1 nút: là các nút con/cháu/chắt… của nút ó
• Cây con của 1 nút: là cây có gốc là con của nút ó Ví dụ: Con của B: • E, F Cha của E: • B Tổ tiên của F: • B, A Hậu duệ của B: • E, F, I, J, K Cây con của nút A 1.2. Các thuật ngữ 10 lOMoAR cPSD| 27879799
• Đường i (Path): là 1 dãy các nút và các cạnh nối 1 nút ến 1 hậu duệ của nó • Độ dài (Length) của
ường i = số lượng cạnh trên ường i = số lượng nút trên ường i - 1 (Ví dụ: Độ dài
ường i (A C E) = 2; ộ dài ường i (C F) = 1)
Như vậy, ường i ộ dài 0 là ường i từ 1 nút ến chính nó
• Độ sâu/mức (Depth/level) của 1 nút N = 1 + ộ dài ường i từ gốc ến nút N
• Chiều cao (Height) của nút N = 1 + ộ dài ường i dài nhất từ N ến lá
• Chiều cao (sâu) của cây = chiều cao của gốc (= chiều cao lớn nhất của tất cả các nút trên cây) sâu=1 Chiều cao của cây= 3 sâu=2 sâu=2 sâu=2 sâu=3 sâu=3 1.2. Các thuật ngữ 11 lOMoAR cPSD| 27879799
• Bậc (Degree) của 1 nút: số lượng nút con của nút ó (= số lượng cây con của nút ó)
• Bậc (Degree) của 1 cây: bậc lớn nhất của tất cả các nút trên cây Bậc = 2 Bậc của cây = ? 2 3 0 3 0 0 0 0 0 0 NGUYỄN KHÁNH PHƯƠNG KHMT – SOICT - ĐHBK HN
Bài tập: Các thuộc tính của cây Thuộc tính 1) Số nút 2) Nút gốc Giá trị 3) Các nút lá 4) Các nút trong 5) Tổ tiên của H 6) Con cháu của B 7) Anh em của E 8) Cây con phải của A G 9) Cây con trái của A 10) Chiều cao của cây H 11) Bậc của cây NGUYỄN KHÁNH PHƯƠNG KHMT – SOICT - ĐHBK HN How we view a tree 12 lOMoAR cPSD| 27879799 root root Nature Lovers View Computer Scientists View 25
1. Định nghĩa và các khái niệm 1.1. Định nghĩa 1.2. Các thuật ngữ
1.3. Cây có thứ tự (Ordered tree) 26
1.3. Cây có thứ tự (Ordered tree) 13 lOMoAR cPSD| 27879799
Cây có thứ tự là cây mà các nút ược sắp xếp theo thứ tự
Ví dụ: Nếu T1 và T2 là cây có thứ tự thì T1 ≠ T2; nếu không T1 = T2 T1 T2
NGUYỄN KHÁNH PHƯƠNG 27 KHMT – SOICT - ĐHBK HN Nội dung
1. Định nghĩa và các khái niệm 2. Biểu diễn cây 3. Duyệt cây 4. Cây nhị phân 2. Biểu diễn cây 14 lOMoAR cPSD| 27879799
• Một số cách cài ặt cây trên máy tính – Mảng
– Danh sách các con (Lists of Children)
– Con trái nhất, anh em bên phải (The Leftmost-Child, Right-Sibling) 29 2. Biểu diễn cây: Mảng
• Giả sử cây T có n nút, ược ánh số 1, 2, …, n.
• Ta sử dụng 1 mảng A ể biểu diễn cây T như sau: –
A[i] = j nếu nút j là cha của nút i
– Gốc của cây T không có cha, do ó A[1] = 0 A 0 1 1 2 2 3 6 6 6 3 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] NGUYỄN KHÁNH PHƯƠNG 30 KHMT – SOICT - ĐHBK HN 2. Biểu diễn cây 15 lOMoAR cPSD| 27879799
• Một số cách cài ặt cây trên máy tính – Mảng
– Danh sách các con (Lists of Children)
– Con trái nhất, anh em bên phải (The Leftmost-Child, Right-Sibling) NGUYỄN KHÁNH PHƯƠNG 31 KHMT – SOICT - ĐHBK HN 2. Biểu diễn cây 16 lOMoAR cPSD| 27879799
• Một số cách cài ặt cây trên máy tính – Mảng
– Danh sách các con (Lists of Children)
– Con trái nhất, em kế cận bên phải (The Leftmost-Child, RightSibling) 33
2. Biểu diễn cây : Con trái nhất, em kế cận bên phải
• Mỗi nút trên cây, có thể:
– Không có con nào, hoặc có duy nhất 1 con trái nhất
– Không có anh em nào, hoặc có duy nhất 1 anh em bên phải Ví dụ 1: nút B • Con trái nhất của B: E • Anh em bên phải của B: C Ví dụ 2: nút C • Không có con • Con trái nhất của C: • Anh em bên phải của C: D Ví dụ 3: nút I • Không có con
• Không có anh em bên phải 34
2. Biểu diễn cây : Con trái nhất, em kế cận bên phải 17 lOMoAR cPSD| 27879799
• Mỗi nút trên cây, có thể:
– Không có con nào, hoặc có duy nhất 1 con trái nhất
– Không có anh em nào, hoặc có duy nhất 1 anh em bên phải
Do ó, ể biểu diễn cây, ta sẽ lưu trữ các thông tin về con trái nhất và anh em bên phải của mỗi nút: Data typedef struct
{ int data; // dữ liệu có trên mỗi nút Con trái nhất Em kế cận phải
struct treeNode * con_trái_nhất; struct treeNode * em_kế_cận_phải; }treeNode; treeNode * Root; 35
2. Biểu diễn cây : Con trái nhất, em kế cận bên phải
• Mỗi nút trên cây, có thể:
– Không có con nào, hoặc có duy nhất 1 con trái nhất
– Không có anh em nào, hoặc có duy nhất 1 anh em bên phải
Do ó, ể biểu diễn cây, ta sẽ lưu trữ các thông tin về con trái nhất và anh em bên phải của mỗi nút: Data struct treeNode
{ int data; // dữ liệu có trên mỗi nút Con trái nhất Em kế cận phải
treeNode * con_trái_nhất; treeNode * em_kế_cận_phải; }; treeNode * Root;
NGUYỄN KHÁNH PHƯƠNG 36 KHMT – SOICT - ĐHBK HN 18 lOMoAR cPSD| 27879799 19 lOMoAR cPSD| 27879799 Nội dung
1. Định nghĩa và các khái niệm 2. Biểu diễn cây 3. Duyệt cây 4. Cây nhị phân
3. Duyệt cây (Tree Traversal) Có 3 phương pháp chính:
• Thứ tự trước (Preorder): – Thăm nút gốc
– Duyệt theo thứ tự trước các nút con (cây con)
• Thứ tự sau (Postorder):
– Duyệt các con (cây con) theo thứ tự sau – Thăm nút gốc
• Thứ tự giữa (Inorder):
– Duyệt con trái nhất (cây con trái nhất) theo thứ tự sau – Thăm nút gốc
– Duyệt các con còn lại (không phải con trái nhất) theo thứ tự sau
Duyệt thứ tự trước (Preorder Traversal) 20