ĐỊNH NGHĨA CÂY NHỊ PHÂN Cây nhị phân: là 1 cây trong đó mỗi đỉnh của cây có tối đa hai nút con và được sắp thành cây con trái và cây con phải... Các dạng cây NP đặc biệt => Gọi chung l
Trang 1CHƯƠNG 3 <continue>
CÂY - TREE
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 1/35
Trang 33.2 CÂY NHỊ PHÂN
1 ĐỊNH NGHĨA CÂY NHỊ PHÂN
2 BIỂU DIỄN CÂY NHỊ PHÂN
3 CÁC PHÉP DUYỆT CÂY
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 3/35
Trang 4ĐỊNH NGHĨA CÂY NHỊ PHÂN
Cây nhị phân: là 1 cây trong đó mỗi đỉnh của cây có tối đa hai nút con và được sắp thành cây con trái và cây con phải
Quy ước: vẽ nút con trái bên trái nút cha và nút con phải bên
phải nút cha
Ví dụ:
Trang 6Các dạng cây NP đặc biệt
=> Gọi chung là các cây nhị phân suy biến thành
danh sách
Cây zic zắc cây lệch trái cây lệch phải
Trang 7Các dạng cây NP đặc biệt
Cây nhị phân hoàn chỉnh : có chiều
cao h thì mọi nút có mức < h-1 đều
Trang 8(a) Cây nhị phân hoàn chỉnh (h=3)
Mọi đỉnh có mức <2 đều có 2 con
(b) Cây nhị phân đầy đủ (h=3)
Mọi đỉnh có mức ≤ 2 đều có 2 con
(c) Cây nhị phân (h=4)
+ Không hoàn chỉnh (D,E có <2 con) + Không đầy đủ
Trang 9Nhận xét
+ Trong cây nhị phân có cùng số đỉnh
- Cây nhị phân suy biến có chiều cao lớn nhất
- Cây nhị phân đầy đủ có chiều cao nhỏ nhất
+ Với cây nhị phân đầy đủ cần chú ý tới một số tính chất
- Số lượng tối đa các đỉnh ở mức i là 2 i
- Số lượng tối đa các đỉnh trên cây có chiều cao h là:
2 h+1 - 1
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 9/35
Trang 10a) BIỂU DIỄN CÂY NHỊ PHÂN ( NP) BỞI MẢNG
b) BIỂU DIỄN CÂY NP BỞI CON TRỎ
c) ỨNG DỤNG CÂY
2.2 Biểu diễn cây nhị phân
Trang 11a) Biểu diễn cây NP bởi mảng
Ví du: Xét cây nhị phân sau:
Infor Left Right
Trang 12a) Biểu diễn cây NP bởi mảng
Trang 13Tiện: Từ con có thể truy cập đến cha và ngược lại:
Với nút i thì
Nút con trái của nó 2i và nút con phải là 2i+1
Nút cha của nút 2i, 2i+1 là i = Div (2i, 2) = Div(2i+1, 2)
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 13/35
Trang 14b) Biểu diễn cây NP bởi con trỏ
struct Node {
item Infor;
struct Node *Left;
struct Node *Right;
};
typedef struct Node *BTree;
BTree root;
Trang 15VD:Xét cây NP biểu diễn bởi con trỏ
Root là con trỏ quản lý cây, luôn trỏ tới gốc
Truy cập đến các đỉnh trên cây là truy cập tuần tự xuất phát từ gốc
Cây rỗng: Root = NULL
Các node
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 15/35
Trang 16Duyệt (thăm) cây NP
Có 3 phương pháp duyệt: Duyệt trước, duyệt giữa, duyệt sau ,
nguyên tắc duyệt tương tự như cây tổng quát
Lưu ý : Xét cây Tổng quát Root 1 , cây nhị phân Root 2 như
=> Kết quả duyệt 2 cây này theo thứ tự giữa là khác nhau, duyệt theo thứ
tự trước, sau cho kết quả giống nhau
Trang 17Xét cây NP gốc T có 2 cây con trái, phải tương ứng là T L , T R
1) Duyệt thứ tự trước cây gốc T: PreOrder(T) như sau:
Thăm gốc T
Thăm con trái T L theo thứ tự trước
Thăm con phải T R theo thứ tự trước
© nuinvtnu-2017 Data structures and Algorithms
Duyệt (thăm) cây NP
Trang 18Visit(T);
PreOrder(T l );
PreOrder(T r );
Trang 19- Thăm Tr theo thứ tự giữa
3) Duyệt sau: PostOrder(T) nhƣ sau:
- Thăm Tl theo thứ tự sau
- Thăm Tr theo thứ tự sau
- Thăm gốc T
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 19/35
Trang 20- Duyệt cây theo thứ tự
trước -> cho biểu thức
tiền tố
- Duyệt cây theo thứ tự
sau -> cho biểu thức
hậu tố
- Duyệt cây theo thứ tự
giữa -> cho biểu thức
trung tố
Trang 21NHẬN XÉT CHUNG
- Người ta thường chuyển cây tổng quát về cây
NP để tiện cho việc biểu diễn cây và cài đặt các phép toán => dùng cách cài đặt cây bằng con trưởng và em liền kề của mỗi đỉnh để chuyển
đổi
- Cây NP vẫn không thuận lợi cho phép toán tìm kiếm (thường chỉ có thể tìm kiếm tuần tự) Thao tác tìm kiếm là quan trọng => Để thuận lợi cho việc tìm kiếm, người ta tổ chức cây NP thành
cây Tìm kiếm nhị phân (TKNP) để có thể áp
dụng phương pháp tìm kiếm nhị phân trên cây
đó
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 21/35
Trang 223 Cây nhị phân tìm kiếm
– Binary search tree
- Cây nhị phân tìm kiếm còn gọi là cây tìm kiếm nhị phân,
viết tắt là cây TKNP
- Nội dung chính
Trang 233.1 Định nghĩa cây TKNP
Cây tìm kiếm nhị phân là một cây nhị phân thoả mãn các điều kiện sau:
Điều kiện 1:
Tất cả các đỉnh của cây con bên trái đều có
khóa đi trước (< ) khoá tại đỉnh gốc
Điều kiện 2:
Khoá tại gốc đi trước (<) khoá của tất cả các
đỉnh ở cây con bên phải
Điều kiện 3:
Cây con bên trái và cây con bên phải cũng là
cây tìm kiếm nhị phân
* Ví dụ
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 23/35
Trang 25- Trường khoá phải chứa các giá trị có thể so
sánh được, tức là nó phải lấy giá trị từ một tập hợp có thứ tự
Nhận xét:
- Trên cây TKNP không có hai đỉnh cùng khoá
- Khi duyệt theo thứ tự giữa (InOrder) cây
TKNP ta được một dãy có thứ tự tăng của các khóa
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 25/35
Trang 263.2 Biểu diễn cây TKNP
*Dạng cài đặt sử dụng con trỏ:
struct Node {
item Key; // chú ý Kiểu dữ liệu của Khóa(Key)
[các trường lưu thông tin khác nếu có]
struct Node *Left;
struct Node *Right;
Trang 273.3 Một số phép toán cơ bản trên cây TKNP
- Cây NPTK có sự khác biệt so với cây nhị phân về các
phép toán, thể hiện ở chỗ:
Với cây NPTK ta có các phép toán nhƣ: tìm kiếm,
thêm hoặc xoá một nút trên cây để cây sau khi thêm,
Trang 28Giả sử p trỏ tới đỉnh tìm thấy
- P bắt đầu từ gốc, so sánh x với
khóa tại nút trỏ bởi p:
+ Nếu bằng nhau thì:
* Kết thúc,
* thông báo tìm thấy + Nếu x nhỏ hơn thì:
* p đi xuống nhánh trái,
* tìm x lặp lại trên cây con trái
+ Nếu x lớn hơn:
* p đi xuống nhánh phải,
* tìm x lặp lại trên cây con phải
Bài toán: Tìm đỉnh có khóa x
trên cây gốc T
Trang 29Nhận xét
- Số phép toán so sánh nhiều nhất trong quá trình tìm kiếm
chiều cao h của cây => độ phức tạp về mặt thời gian
O(h), dó đó thuận lợi cho phép toán tìm kiếm
- Cây TKNP thuận lợi cho phép tìm kiếm => cũng thuận lợi cho các phép toán thêm, xóa, sửa thông tin của đỉnh trên cây ( ~ các phép toán liên quan đến tìm kiếm )
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 29/35
Trang 30- Nếu p = null: Chèn x vào T như sau :
+ Xin cấp bộ nhớ cho một nút mới:
New(M)
+ Gán giá trị cho nút mới:
M->key = x ; M->Left = null;
Bài toán: Chèn đỉnh có khóa x vào cây T nếu x chưa có
trên T sao cho sau khi thêm T vẫn là cây TKNP)
x 19 x
M
Trang 313) Xóa đỉnh có khóa x trên cây T
- Search (x, p, T)
- Nếu p = null => x T, kết thúc
- Nếu p != null => x T, p trỏ tới đỉnh tìm thấy, xóa x
khỏi T, sao cho cây sau khi xóa x vẫn là cây TKNP ~ xóa đỉnh được trỏ bởi p
Xóa : Ta chia làm 3 trường hợp:
TH1: Nếu p là lá: p = null
TH2: Nếu p có một trong 2 con là :
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 31/35
Trang 32- Treo cây con khác vào vị trí của p
Trang 33VD: Xét cây T trước khi xóa và sau
Trang 34Cách làm:
- Tìm đỉnh cực phải của cây con trái/ đỉnh
cực trái của cây con phải của đỉnh trỏ bởi p
- Hoán đổi nội dung của đỉnh trỏ bởi p và
đỉnh cực phải của cây con trái/đỉnh cực trái của cây con phải
- Xóa nút cực phải/nút cực trái, việc xoá nút này sẽ rơi vào một trong 2 trường hợp ở trên (TH1 hoặc TH2)
TH3: Đỉnh loại bỏ được trỏ bởi P
có 2 con đều khác rỗng:
Trang 35VD 1: Sau khi hoán vị -> rơi vào TH1
VD 2: Sau khi hoán vị -> rơi vào TH2
© nuinvtnu-2017 Data structures and Algorithms Chapter 3 - 35/35