Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 34 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
34
Dung lượng
1,11 MB
Nội dung
CẤU TRÚC DỮ LIỆU CÂY (TREE) Thạc sĩ: HUỲNH PHƯỚC DANH Email: danhhp@sonadezi.edu.vn ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 2 - KHÁI NIỆM CÂY Cây là một tập hợp các phần tử (các nút) được tổ chức và có các đặc điểm sau: Hoặc là một tập hợp rỗng (cây rỗng). Hoặc là một tập hợp khác rỗng trong đó có một nút duy nhất được làm nút gốc (Root’s Node), các nút còn lại được phân thành các nhóm trong đó mỗi nhóm lại là một cây gọi là cây con (Sub-Tree). Như vậy, một cây con có thể là một tập rỗng các nút và cũng có thể là một tập hợp khác rỗng trong đó có một nút làm nút gốc cây con. ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 3 - CÁC KHÁI NIỆM Bậc của một nút: là số cây con của nút đó. Nút gốc: là nút không có nút cha. Nút lá: là nút có bậc bằng 0. Nút nhánh: là nút có bậc khác 0 và không phải là gốc. 2 2 2 110 0 0 0 ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 4 - CÁC KHÁI NIỆM Mức 3 Mức 2 Mức 1 Mức 0 Độ dài đường đi từ gốc đến nút x: là số nhánh cần đi qua kể từ gốc đến x. Độ cao của cây: Độ dài đường đi từ gốc đến nút lá ở mức thấp nhất. ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 5 - CÂY NHỊ PHÂN Cây nhị phân là cây rỗng hoặc là cây mà mỗi nút có tối đa hai nút con (cây có bậc bằng 2) . Hơn nữa các nút con của cây được phân biệt thứ tự rõ ràng, một nút con gọi là nút con trái và một nút con gọi là nút con phải. Ta qui ướ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, mỗi nút con được nối với nút cha của nó bởi một đoạn thẳng. ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 6 - CÂY NHỊ PHÂN A A B B C C D D E E F F H H G G K K Root Root A A B B C C D D E E F F H H G G K K ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 7 - CẤU TRÚC DỮ LIỆU CÂY NHỊ PHÂN struct BinT_Node { <Kiểu dữ liệu> info; BinT_Node *left; // Vùng liên kết quản lý địa chỉ nút gốc cây con trái BinT_Node *right; // Vùng liên kết quản lý địa chỉ nút gốc cây con phải }; Info Info Left Left Right Right BinT_Node ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 8 - DUYỆTCÂY NHỊ PHÂN Duyệt theo thứ tự nút gốc trước (Preorder): Theo cách duyệt này thì nút gốc sẽ được duyệt trước, sau đó mới duyệt đến hai cây con. Căn cứ vào thứ tự duyệt hai cây con mà chúng ta có hai cách duyệt theo thứ tự nút gốc trước: Duyệt nút gốc, duyệt cây con trái, duyệt cây con phải (Root – Left – Right) Duyệt nút gốc, duyệt cây con phải, duyệt cây con trái (Root – Right – Left) ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 9 - DUYỆTCÂY NHỊ PHÂN A, B, C, D, E, F, H, K, L, M A A B B H H C C D D K K L L F F M M E E Thuật giải void Traversal_NLR(BinT_Node* Root) { if (Root = = NULL) return; cout << Root->info << “ “; Traversal_NLR(Root->left); Traversal_NLR(Root->right); } ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 10 - DUYỆTCÂY NHỊ PHÂN Duyệt theo thứ tự nút gốc giữa (Inorder): Theo cách duyệt này thì chúng ta duyệt một trong hai cây con trước rồi đến duyệt nút gốc và sau đó mới duyệt cây con còn lại. Căn cứ vào thứ tự duyệt hai cây con chúng ta cũng sẽ có hai cách duyệt theo thứ tự nút gốc giữa: Duyệt cây con trái, duyệt nút gốc, duyệt cây con phải (Left – Root – Right) Duyệt cây con phải, duyệt nút gốc, duyệt cây con trái (Right – Root – Left) [...]... - Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Ví dụ: hình minh hoạ một cây TKNP có khoá là số nguyên (với quan hệ thứ tự trong tập số nguyên) 20 35 10 17 5 15 ThS Huỳnh Phước Danh 42 22 30 - 15 - Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Qui ước: Cũng như tất cả các cấu trúc khác, ta coi cây rỗng là cây TKNP Nhận xét: Trên cây TKNP không có hai nút cùng khoá Cây con của một cây. .. bày trong phần cây nhị phân Sẽ không có sự khác biệt nào trong việc cài đặt cấu trúc dữ liệu cho cây TKNP so với cây nhị phân, nhưng tất nhiên, sẽ có sự khác biệt trong các giải thuật thao tác trên cây TKNP như tìm kiếm, thêm hoặc xoá một nút trên cây TKNP để luôn đảm bảo tính chất cuả cây TKNP ThS Huỳnh Phước Danh - 17 - Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Tổ chức dữ liệu và khởi tạo... con của một cây TKNP là cây TKNP Khi duyệt trung tự (InOrder) cây TKNP ta được một dãy có thứ tự tăng Chẳng hạn duyệt duyệt cây con phải (Left – Root - Right) cây trên ta có dãy: 5, 10, 15, 17, 20, 22, 30, 35, 42 ThS Huỳnh Phước Danh - 16 - Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Tổ chức dữ liệu và khởi tạo Cài đặt cây tìm kiếm nhị phân Cây TKNP, trước hết, là một cây nhị phân Do đó ta... Phước Danh Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Xóa một nút có khóa cho trước ra khỏi cây TKNP Việc xoá một nút như vậy, tất nhiên, ta phải bảo đảm cấu trúc cây TKNP không bị phá vỡ Ta có các trường hợp như sau: Ví dụ về giải thuật xóa nút trên cây N có hai nút con ta thay nó bởi nút lớn nhất trên cây con trái của nó (nút cực phải của cây con trái) hoặc là nút bé nhất trên cây con phải... ThS Huỳnh Phước Cấu trúc dữ liệu và giải thuật BÀI TẬP Bài 4 Hãy xây dựng cây nhị phân tìm kiếm theo thứ tự nhập sau: 27 19 10 21 3 15 41 50 30 27 Hãy duyệt cây trên theo thứ tự giữa Bài 5 Hãy xây dựng cây nhị phân tìm kiếm theo thứ tự nhập sau: H B C A E D T M X O Hãy duyệt cây trên theo thứ tự sau ThS Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật BÀI TẬP Bài 5 Hãy vẽ cây nhị phân tìm... cho trước ra khỏi cây TKNP Giả sử ta muốn xoá một nút có khoá x, trước hết ta phải tìm kiếm nút chứa khoá x trên cây ThS Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Xóa một nút có khóa cho trước ra khỏi cây TKNP Việc xoá một nút như vậy, tất nhiên, ta phải bảo đảm cấu trúc cây TKNP không bị phá vỡ Ta có các trường hợp như sau: Ví dụ về giải thuật xóa nút trên cây Nếu không... C, E, F, D, B, K, M, L, H, A M, L, K, H, F, E , D , C, B ThS Huỳnh Phước Danh - 13 - Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Cây tìm kiếm nhị phân (TKNP) là cây nhị phân mà khoá tại mỗi nút cây lớn hơn khoá của tất cả các nút thuộc cây con bên trái và nhỏ hơn khoá của tất cả các nút thuộc cây con bên phải Lưu ý: Dữ liệu lưu trữ tại mỗi nút có thể rất phức tạp như là một record chẳng hạn, trong... BinT_Node { info; BinT_Node *Left; // Vùng liên kết quản lý địa chỉ nút gốc cây con trái BinT_Node *Right; // Vùng liên kết quản lý địa chỉ nút gốc cây con phải }; // Khai báo biến root quản lý cây nhi phan: BinT_Node* Root; //Khởi tạo cây nhi phan: Root = NULL; ThS Huỳnh Phước Danh - 18 - Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Tìm kiếm một nút có khóa cho trước trên cây TKNP Để... duyệt sau cùng so với duyệt hai nút gốc cây con Do vậy, căn cứ vào thứ tự duyệt hai cây con mà chúng ta cũng có hai cách duyệt theo thứ tự nút gốc sau: Duyệt cây con trái, duyệt cây con phải, duyệt nút gốc (Left – Right – Root) Duyệt cây con phải, duyệt cây con trái, duyệt nút gốc (Right – Left – Root) ThS Huỳnh Phước Danh - 12 - Cấu trúc dữ liệu và giải thuật DUYỆTCÂY NHỊ PHÂN Thuật giải void Traversal_LRN(BinT_Node*... việc tìm khoá x trên cây con bên trái ThS Huỳnh Phước Danh - 19 - Cấu trúc dữ liệu và giải thuật CÂY TÌM KIẾM NHỊ PHÂN Ví dụ: tìm nút có khoá 30 trong cây ở bên So sánh 30 với khoá nút gốc là 20, vì 30 > 20 vậy ta tìm tiếp trên cây con bên phải, tức là cây có nút gốc có khoá là 35 So sánh 30 với khoá của nút gốc là 35, vì 30 < 35 vậy ta tìm tiếp trên cây con bên trái, tức là cây có nút gốc có khoá . CẤU TRÚC DỮ LIỆU CÂY (TREE) Thạc sĩ: HUỲNH PHƯỚC DANH Email: danhhp@sonadezi.edu.vn ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 2 - KHÁI NIỆM CÂY Cây là một tập hợp. nút trên cây TKNP để luôn đảm bảo tính chất cuả cây TKNP. Tổ chức dữ liệu và khởi tạo ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 18 - CÂY TÌM KIẾM NHỊ PHÂN Tổ chức dữ liệu và khởi. 20 20 10 10 5 5 17 17 15 15 35 35 22 22 30 30 42 42 ThS. Huỳnh Phước Danh Cấu trúc dữ liệu và giải thuật - 16 - CÂY TÌM KIẾM NHỊ PHÂN Qui ước: Cũng như tất cả các cấu trúc khác, ta coi cây rỗng là cây TKNP Nhận xét: Trên cây TKNP không có hai