Cây Nhị Phân... I.1 Khái Niệm và Ví Dụ6 Cây là một cấu trúc dữ liệu quan trọng để biểu diễn và lưu trữ dữ liệu trong bộ nhớ chính và mang tính “kế thừa” Tính kế thừa : Các node con
Trang 1Giảng viên : Nguyễn Minh Thành Email : thanhnm.itc@itc.edu.vn
Chương 4 : CÂY NHỊ PHÂN
Trang 24 Các thuật ngữ liên quan
II Cây Nhị Phân
Trang 4I.1 Khái Niệm và Ví Dụ
4
Ví dụ 1: bài toán đưa thư
Trên thế giới hơn có ~ 10 tỉ người
Thành, khoa CNTT, CĐ CNTT, TpHCM, Việt Nam
Cách tìm ra “Thành” nhanh nhất ?
Sử dụng mảng ?
Sứ dụng danh sách liên kết (linked list) ?
Trang 5I.1 Khái Niệm và Ví Dụ
5
Ví dụ 1: bài toán đưa thư
Trang 6I.1 Khái Niệm và Ví Dụ
6
Cây là một cấu trúc dữ liệu quan trọng để biểu diễn và lưu trữ dữ liệu trong bộ nhớ chính và mang tính “kế thừa”
Tính kế thừa :
Các node con phải liên quan đến node cha
Các cây mang tính kế thừa :
Cây gia phả
Cây phân cấp các loài (sinh vật)
Trang 7 Tồn tại duy nhất một node pk duy nhất gọi là gốc cây
Các nút còn lại được chia thành m tập không giao nhau :
T1, T2, … TM
Mỗi Ti cây con của cây <T>
Trang 8I.2 Định Nghĩa
8
Trang 9I.2 Định Nghĩa
9
Trang 10I.2 Định Nghĩa
10
Trang 11I.3 Các Tính Chất Của Cây
Trang 12I.4 Các Thuật Ngữ Liên Quan
12
Node : là 1 phần tử trong cây Mỗi node chứa 1 dữ liệu bất kỳ
Nhánh : là đoạn nối giữa 2 nút
Node cha
Node con
Nút anh em : là những node có cùng nút cha
Bậc của 1 node pi : là số node con của pi
Tìm bậc của các node trên cây T trong ví dụ trên ?
Node gốc : node không có node cha
Node lá (node ngoài) : node có bậc = 0 (không có node con)
Node trong (node nhánh) : là node có node con và node cha
Cây con
Trong cây T có bao nhiêu cây con ?
Trang 13I.4 Các Thuật Ngữ Liên Quan
Trang 14I.4 Các Thuật Ngữ Liên Quan
14
Mức (level)
Mức (p)=0 nếu p là gốc
Mức (p) = mức (cha(p)) +1 nếu p không phải gốc
Chiều cao của cây (hT): đường đi dài nhất từ node gốc đến node lá
hT = max { path (gốc, pi) / pi là node lá <T>}
Tính chiều cao của cây T trong ví dụ trên
Trang 15I.4 Các Thuật Ngữ Liên Quan
15
Mức (level)
Mức (p)=0 nếu p là gốc
Mức (p) = mức (cha(p)) +1 nếu p không phải gốc
Chiều cao của cây (hT): đường đi dài nhất từ node gốc đến node lá
hT = max { path (gốc, pi) / pi là node lá <T>}
Tính chiều cao của cây T trong ví dụ trên
Trang 16II Cây Nhị Phân
16
1. Định nghĩa
2. Cách thức lưu trữ cây
Trang 19II.2 Lưu Trữ Cây
19
Có 2 cách tổ chức cây nhị phân :
Lưu trữ bằng mảng
Lưu trữ bằng con trỏ cấu trúc
Chi tiết ở phần Cây Nhị Phân Tìm Kiếm
Trang 20III Cây Nhị Phân Tìm Kiếm
20
1. Định nghĩa
2. Ý nghĩa
3. Cài đặt
Trang 21 Giá trị nhỏ nhất nằm ở node trái nhất của cây
Giá trị lớn nhất nằm ở node phải nhất của cây
Trang 22III.2 Ý nghĩa
22
Cây nhị phân tìm kiếm giúp tận dụng hết điểm mạnh của mảng và danh sách kết trong việc biểu lưu trữ cây.
Trang 23III.3 Cài đặt
23
Có 2 cách tổ chức cây nhị phân :
Lưu trữ bằng mảng
Lưu trữ bằng con trỏ cấu trúc
Sử dụng con trỏ cấu trúc (DSLK) là tối ưu hơn
Trang 25III.3 Cài đặt
25
Các lưu ý khi cài đặt
Bước 1 : Khai báo kiểu dữ liệu biểu diễn cây
Bước 2 : Xây dựng hàm đưa dữ liệu (nhập) vào cây
Bước 3 : Xây dựng các thao tác duyệt, tìm kiếm, huỷ…
Các lưu ý khác
Trước khi tạo node mới phải xin cấp phát vùng nhớ
Trước khi tạo cây mới phải khởi tạo cây rỗng
Trước khi kết thúc chương trình phải huỷ cây (giải phóng bộ nhớ)
Trang 26III.3 Cài đặt
26
Cấu trúc chương trình
Trang 27III.3 Cài đặt
27
Thao tác Khởi tạo cây rỗng
void BSTCreate(TREE &t)
{
t = NULL;
}
Thao tác Kiểm tra cây rỗng
int BSTIsEmpty(const TREE &t){
if (t==NULL) return 1;
return 0;
}
Trang 28III.3 Cài đặt
28
Thao tác Xây dựng cây
• Nếu node cần thêm <
node đang xét thì thêm về bên trái
• Nếu node cần thêm <
node đang xét thì thêm về bên phải
Trang 29III.3 Cài đặt
29
Thao tác Xây dựng cây
Trang 30III.3 Cài đặt
30
Thao tác Duyệt Cây
Có 3 cách duyệt cây
Duyệt gốc trước (Pre-order) : NLR
Duyệt gốc giữa (In-Order) : LNR
Duyệt gốc sau (Post-Order) : LRN
Trang 37III.3 Cài đặt
37
Xây dựng lại cây sau khi được in ra từ các thao tác Duyệt Cây
Xây dựng cây từ phép duyệt NLR
Chọn giá trị đầu làm node gốc
Lần lượt đưa các giá trị còn lại từ trái sang phải vào cây theo nguyên tắc xây dựng cây
Xây dựng cây từ phép duyệt LRN
Chọn giá trị cuối cùng làm gốc
Lần lượt đưa các giá trị còn lại từ phải sang trái vào cây theo nguyên tắc xây dựng cây
Trang 38III.3 Cài đặt
38
Xây dựng lại cây sau khi được in ra từ các thao tác Duyệt Cây
Xây dựng cây từ phép duyệt LNR
Gọi r là số phần tử của cây
Giá trị ở giữa được tính như sau : m = r div 2
Trang 39III.3 Cài đặt
39
Các thao tác tìm thông tin của cây
Số node lá
Số node có 1 cây con
Số node có 1 cây con phải
Số node có 1 cây con trái
Số node có 2 cây con
Độ cao của cây
Số node của cây
Các node trên cùng mức
Độ dài đường đi từ gốc đến x
Trang 40III.3 Cài đặt
40
Các thao tác tìm thông tin của cây
Số node lá
Trang 41III.3 Cài đặt
41
Các thao tác tìm thông tin của cây
Số node có 1 cây con
Trang 42III.3 Cài đặt
42
Các thao tác tìm thông tin của cây
Tính độ cao của cây
Trang 43III.3 Cài đặt
43
Các thao tác tìm thông tin của cây
Số node cùng mức k
Trang 44III.3 Cài đặt
44
Các thao tác tìm thông tin của cây
Số node có 1 cây con phải
Số node có 1 cây con trái
Số node có 2 cây con
Số node của cây
Độ dài đường đi từ gốc đến x
Trang 45III.3 Cài đặt
45
Các thao tác tìm thông tin của cây
Số node có 1 cây con phải
Trang 47III.3 Cài đặt
47
Các thao tác tìm kiếm
Tìm x : trả về con trỏ trỏ đến vùng nhớ chứa x
Trang 50 Node có 1 cây con
Node có 2 cây con
Trang 51III.3 Cài đặt
51
Thao tác Xoá node
Xoá node lá
Xoá vùng nhớ của node
Con trỏ của node cha sẽ trỏ đến NULL
Xoá node có 1 cây con
Đổi vị trí node cần huỷ và node con
Xoá node cần huỷ
Xoá node có 2 cây con
Tìm phần tử thế mạng cho node cần xoá (phần tử phải nhất bên trái, hoặc trái nhất bên phải)
Đổi key của node thế mạng với cần xoá
Xoá node thế mạng
Trang 52III.3 Cài đặt
52
Thao tác Xoá node
Trang 53III.3 Cài đặt
53
Thao tác Xoá node
Trang 54III.3 Cài đặt
54
Thao tác Huỷ toàn bộ cây
Sinh viên tự làm
Trang 55Hỏi Đáp
55