Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 4 trình bày các kiến thức liên quan đến cây nhị phân. Các nội dung chính trong chương này gồm có: Cấu trúc cây, cây nhị phân, cây nhị phân tìm kiếm. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.
Trang 1Chương 4 CÂY NHỊ PHÂN
4.1 Cấu trúc cây
4.1.1 ðịnh nghĩa 4.1.2 Một số khái niệm cơ bản
4.2 Cây nhị phân
4.2.1 ðịnh nghĩa 4.2.2 Một số tính chất của cây nhị phân 4.2.3 Biểu diễn cây nhị phân
4.3 Cây nhị phân tìm kiếm
4.3.1 ðịnh nghĩa 4.3.2 Các tính chất 4.3.2 Các thao tác trên cây nhị phân tìm kiếm
4.4 Bài tập
Trang 24.1 Cấu Trúc Cây
4.1.1 ðịnh nghĩa cây 4.1.2 Một số khái niệm cơ bản
Trang 34.1.1 ðịnh nghĩa cây
ðịnh nghĩa 1: Một cây là tập hợp hữu hạn các nút trong
ñó có một nút ñặc biệt gọi là gốc (root) Giữa các nút có một quan hệ phân cấp gọi là "quan hệ cha con".
Nút gốc
Trang 4Nút gốc
r T1
T2
ðịnh nghĩa 2: Cây ñược ñịnh nghĩa ñệ qui như sau
1 Một nút là một cây và nút này cũng là gốc của cây.
2 Giả sử T1, T2, …,Tn (n ≥ 1) là các cây có gốc tương ứng r1, r2,…, rn Khi ñó cây T với gốc r ñược hình thành bằng cách cho r trở thành nút cha của các nút r1, r2,…, rn
Trang 55.1.2 Một số khái niệm cơ bản
Bậc của một nút: Là số con của nút ñó
Bậc của một cây: Là bậc lớn nhất của các nút có trên
cây ñó (số cây con tối ña của một nút thuộc cây) Cây có
bậc n thì gọi là cây n - phân
Cây bậc 2 hay còn gọi là cây nhị phân
Trang 7Mức của một nút
Mức (gốc (T0)) =0
Gọi T1, T2, , Tn là các cây con của T0
Khi ñó Mức (T1) = Mức (T2) = = Mức (Tn) = Mức (T0) +1
Chiều cao của cây: Là số mức lớn nhất có trên cây ñó
Cây có chiều cao là 3
Trang 8ðường ñi: Dãy các ñỉnh n1,n2, .,nk gọi là ñường ñinếu ni là cha của ni+1 (1 ≤ i ≤ k-1
ðộ dài của ñường ñi: Là số nút trên ñường ñi -1
ðộ dài ñường ñi là 3
Trang 9Cây ñược sắp – Cây có thứ tự: Trong một cây, nếucác cây con của mỗi ñỉnh ñược sắp theo một thứ nhấtñịnh, thì cây ñược gọi là cây ñược sắp (cây có thứ tự)
A
5
Trang 104.2 Cây Nhị Phân
4.2.1 ðịnh nghĩa4.2.2 Một số tính chất của cây nhị phân4.2.3 Biểu diễn cây nhị phân
Trang 11Cây nhị phân là cây mà mỗi nút có tối ña hai cây con ðối với cây con của một nút có phân biệt cây con trái và cây con phải.
4.2.1 ðịnh Nghĩa
Trang 124.2.1 Một Số Tính Chất Của Cây Nhị Phân
Số lượng tối ña các nút có ở mức i trên cây nhị phân là
2 i -1 (i ≥ 1)
Số lượng nút tối ña trên 1 cây nhị phân có chiều cao h là
2 h -1(h ≥ 1 )
Trang 134.2.3 Biễu Diễn Cây Nhị Phân
Lưu trữ kế tiếp
Phương pháp tự nhiên nhất ñể biểu diễn cây nhị phân
là chỉ ra ñỉnh con trái và ñỉnh con phải của mỗi ñỉnh
Ta có thể sử dụng một mảng ñể lưu trữ các ñỉnh của cây nhị phân
Mỗi ñỉnh của cây ñược biểu gồm ba giá trị
Infor: Mô tả thông tin gắn với mỗi ñỉnh
Letf : Chỉ ñỉnh con trái
Right: Chỉ ñỉnh con phải
Trang 15Nếu cây nhị phân ñầy ñủ Có thể lưu trữ cây nàybằng mãng 1 chiều
Trang 16Nếu cây nhị phân không ñầy ñủ thì cách lưu trữ nàykhông thích hợp vì phí nhiều bộ nhớ.
Trang 17Lưu trữ móc nối
Cách lưu trữ này khắc phục nhược ñiểm của cách lưutrữ kế tiếp ñồng thời phản ánh ñược dạng tự nhiên củacây Cách lưu trữ này một phần tử có qui tắc sau:
Infor: Mô tả thông tin gắn với mỗi ñỉnh
Letf : Con trỏ trỏ tới cây con trái
Right: Con trỏ trỏ tới cây con phải
Trang 184.3 Cây Nhị Phân Tìm Kiếm
4.3.1 ðịnh nghĩa
4.3.2 Các tính chất
4.3.3 Các thao tác trên cây nhị phân tìm kiếm
Trang 194.3.1 ðịnh Nghĩa
Cây nhị phân tìm kiếm (CNPTK) là cây nhị phân thoả mãnñồng thời các ñiều kiện:
Khoá các ñỉnh thuộc cây con trái nhỏ hơn khoá nút gốc
Khoá nút gốc nhỏ hơn (hoặc bằng) khoá các ñỉnh thuộccây con phải
Cây con trái và cây con phải của gốc cũng là CNPTK
Cây nhị phân ñược sử dụng vào nhiều mục ñích khác nhau Tuy nhiên việc sử dụng cây nhị phân ñể lưu giữ và tìm kiếm thông tin vẫn là một trong những áp dụng quan trọng nhất của cây nhị phân
Trang 20Nút có giá trị nhỏ nhất nằm ở trái nhất của cây
Nút có giá trị lớn nhất nẳm ở phải nấht của cây
4.3.2 Các Tính Chất
Trang 214.3.3 Các Thao Tác Trên Cây NPTK
Dựng cây
Duyệt cây
Dựng cây từ kết quả duyệt cây
Xóa nút trên cây
Trang 22Dựng cây
Nếu nút cần thêm < nút ñang xét thì thêm về bên trái
Ngược lại thì thêm về bên phải
Trang 23Duyệt Cây
Duyệt theo thứ tự trước (NLR)
- Thăm gốc
- Duyệt câycon trái theo thứ trước
- Duyệt cây con phải theo thư tự trước
Trang 241 3 4 6 7 15 23 36 40
Duyệt theo thứ tự giữa (LNR )
- Duyệt câycon trái theo thứ giữa
- Thăm gốc
- Duyệt cây con phải theo thư tự giữa
Trang 251 4 6 3 23 15 40 36 7
Duyệt theo thứ tự sau (LRN)
- Duyệt câycon trái theo thứ sau
- Duyệt cây con phải theo thư tự sau
- Thăm gốc
Trang 26Dựng cây từ kết quả duyệt cây
Dựng cây từ kết quả Duyệt theo thứ tự trước (NLR)
- Chọn giá trị ñầu tiên làm nút 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 dựng cây
Trang 28Xóa nút trên cây
Xóa nút có khóa là :1
Xóa tiếp nút có khóa là :23
Xóa nút lá.
Trang 294 1
7
40 23
4 1
Xóa nút có 1 cây con
Trang 3040 15
23
6
4 1
Trang 31Cách 1: Tìm nút trái nhất của cây con phải
Xóa nút 3 (Dùng nút 4 trhay thế)
7
40 15
23
5 1
6
Trang 32Cách 2: Tìm nút trái phải của cây con trái
Xóa nút 36 (Dùng nút 23 thay thế)
7
40 15
5
4 1
6
Trang 334.4 Cài ðặt Cây NPTK
Cấu trúc chương trình
Trang 34Cá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, Hủy
Các lưu ý khác
- Trước khi tạo nút phải xin cấp phát vùng nhớ
- Trước khi tạo cây phải khởi tạo cây rỗng
- Trước khi kết thúc chương trình phải hủy cây (Giải phóng vùng nhớ)
Trang 35Khai báo cây NPTK kiểu dữ liệu cho nút là số nguyên
Trang 36Thêm nút vào cây
Trang 37Duyệt cây theo thứ tự NLR
Tại nút t ñang xét nếu khác rỗng thì
In giá trị t
Duyệt cây con bên trái của t theo thứ tự NLR
Duyệt cây con bên phải củ t theo thứ tự NLR
Trang 38Duyệt cây theo thứ tự LNR
Tại nút t ñang xét nếu khác rỗng thì
Duyệt cây con bên trái của t theo thứ tự LNR
In giá trị t
Duyệt cây con bên phải củ t theo thứ tự LNR
Trang 39Duyệt cây theo thứ tự LRN
Tại nút t ñang xét nếu khác rỗng thì
Duyệt cây con bên trái của t theo thứ tự LRN
Duyệt cây con bên phải củ t theo thứ tự LRN
In giá trị t