Chương 10: Cây nhị phân
Số trang: 51
Loại file: ppt
Dung lượng: 896.00 KB
Lượt xem: 1
Lượt tải: 0
Xem trước 6 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Mức:Node gốc ở mức 0.Node gốc của các cây con của một node ở mức m là m+1.Chiều cao:Cây rỗng là 0.Chiều cao lớn nhất của 2 cây con cộng 1(Hoặc: mức lớn nhất của các node cộng 1)Đường đi (path)Tên các node của quá trình đi từ node gốc theo các cây con đến một node nào đó.
Nội dung trích xuất từ tài liệu:
Chương 10: Cây nhị phânCẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Chương 10: Cây nhị phânĐịnh nghĩa Cây nhị phân Cây rỗng Hoặc có một node gọi là gốc (root) và 2 cây con gọi là cây con trái và cây con phải Ví dụ: Cây rỗng: Cây có 1 node: là node gốc Cây có 2 node: 2 Chương 10: Cây nhị phânCác định nghĩa khác Mức: Node gốc ở mức 0. Node gốc của các cây con của một node ở mức m là m+1. Chiều cao: Cây rỗng là 0. Chiều cao lớn nhất của 2 cây con cộng 1 (Hoặc: mức lớn nhất của các node cộng 1) Đường đi (path) Tên các node của quá trình đi từ node gốc theo các cây con đến một node nào đó. 3 Chương 10: Cây nhị phânCác định nghĩa khác (tt.) Node trước, sau, cha, con: Node x là trước node y (node y là sau node x), n ếu trên đường đi đến y có x. Node x là cha node y (node y là con node x), n ếu trên đường đi đến y node x nằm ngay trước node y. Node lá, trung gian: Node lá là node không có cây con nào. Node trung gian không là node gốc hay node lá. 4 Chương 10: Cây nhị phânCác tính chất khác Cây nhị phân đầy đủ, gần đầy đủ: Đầy đủ: các node lá luôn nằm ở mức cao nhất và các nút không là nút lá có đầy đủ 2 nhánh con. Gần đầy đủ: Giống như trên nhưng các node lá n ằm ở m ức cao nhất (hoặc trước đó một mức) và lấp đầy từ bên trái sang bên phải ở mức cao nhất. Chiều cao của cây có n node: Trung bình h = [lg n] + 1 Đầy đủ h = lg (n + 1) Suy biến h = n Số phần tử tại mức i nhiều nhất là 2i 5 Chương 10: Cây nhị phânPhép duyệt cây Duyệt qua từng node của cây (mỗi node 1 lần) Cách duyệt: Chính thức: NLR, LNR, LRN, NRL, RNL, RLN Chuẩn: NLR (preorder), LNR (inorder), LRN (postorder) 6 Chương 10: Cây nhị phânVí dụ về phép duyệt cây NLR A B C D E F G H I J K L M N O P Kết quả: A B D H I N E J O K C F L P G M 7 Chương 10: Cây nhị phânVí dụ về phép duyệt cây LNR A B C D E F G H I J K L M N O P Kết quả: H D N I B J O E K A F P L C M G 8 Chương 10: Cây nhị phânVí dụ về phép duyệt cây LRN A B C D E F G H I J K L M N O P Kết quả: H N I D O J K E B P L F M G C A 9 Chương 10: Cây nhị phânCây liên kết 10 Chương 10: Cây nhị phânThiết kế cây liên kết template struct Binary_node { // data members: Entry data; Binary_node *left, *right; // constructors: Binary_node( ); Binary_node(const Entry &x); }; template class Binary_tree { public: // Add methods here. protected: // Add auxiliary function prototypes here. Binary_node *root; }; 11 Chương 10: Cây nhị phânKhởi tạo và kiểm tra rỗng template Binary_tree::Binary_tree() { root = NULL; }; template bool Binary_tree::empty() { return root == NULL; }; 12 Chương 10: Cây nhị phânThiết kế các phép duyệt cây template void Binary_tree :: inorder(void (*visit)(Entry &)) { recursive_inorder(root, visit); } template void Binary_tree :: preorder(void (*visit)(Entry &)) { recursive_preorder(root, visit); } template void Binary_tree :: postorder(void (*visit)(Entry &)) { recursive_postorder(root, visit); } 13 Chương 10: Cây nhị phânGiải thuật duyệt cây inorder Algorithm recursive_inorder Input: subroot là con trỏ node gốc và hàm visit Output: kết quả phép duyệt 1. if (cây con không rỗng) 1.1. Call recursive_inorder với nhánh trái của subroot 1.2. Duyệt node subroot bằng hàm visit 1.3. Call recursive_inorder với nhánh phải của subroot End recursive_inorder 14 Chương 10: Cây nhị phânMã C++ duyệt cây inorder template void Binary_tree ::recursive_inorder ...
Nội dung trích xuất từ tài liệu:
Chương 10: Cây nhị phânCẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Chương 10: Cây nhị phânĐịnh nghĩa Cây nhị phân Cây rỗng Hoặc có một node gọi là gốc (root) và 2 cây con gọi là cây con trái và cây con phải Ví dụ: Cây rỗng: Cây có 1 node: là node gốc Cây có 2 node: 2 Chương 10: Cây nhị phânCác định nghĩa khác Mức: Node gốc ở mức 0. Node gốc của các cây con của một node ở mức m là m+1. Chiều cao: Cây rỗng là 0. Chiều cao lớn nhất của 2 cây con cộng 1 (Hoặc: mức lớn nhất của các node cộng 1) Đường đi (path) Tên các node của quá trình đi từ node gốc theo các cây con đến một node nào đó. 3 Chương 10: Cây nhị phânCác định nghĩa khác (tt.) Node trước, sau, cha, con: Node x là trước node y (node y là sau node x), n ếu trên đường đi đến y có x. Node x là cha node y (node y là con node x), n ếu trên đường đi đến y node x nằm ngay trước node y. Node lá, trung gian: Node lá là node không có cây con nào. Node trung gian không là node gốc hay node lá. 4 Chương 10: Cây nhị phânCác tính chất khác Cây nhị phân đầy đủ, gần đầy đủ: Đầy đủ: các node lá luôn nằm ở mức cao nhất và các nút không là nút lá có đầy đủ 2 nhánh con. Gần đầy đủ: Giống như trên nhưng các node lá n ằm ở m ức cao nhất (hoặc trước đó một mức) và lấp đầy từ bên trái sang bên phải ở mức cao nhất. Chiều cao của cây có n node: Trung bình h = [lg n] + 1 Đầy đủ h = lg (n + 1) Suy biến h = n Số phần tử tại mức i nhiều nhất là 2i 5 Chương 10: Cây nhị phânPhép duyệt cây Duyệt qua từng node của cây (mỗi node 1 lần) Cách duyệt: Chính thức: NLR, LNR, LRN, NRL, RNL, RLN Chuẩn: NLR (preorder), LNR (inorder), LRN (postorder) 6 Chương 10: Cây nhị phânVí dụ về phép duyệt cây NLR A B C D E F G H I J K L M N O P Kết quả: A B D H I N E J O K C F L P G M 7 Chương 10: Cây nhị phânVí dụ về phép duyệt cây LNR A B C D E F G H I J K L M N O P Kết quả: H D N I B J O E K A F P L C M G 8 Chương 10: Cây nhị phânVí dụ về phép duyệt cây LRN A B C D E F G H I J K L M N O P Kết quả: H N I D O J K E B P L F M G C A 9 Chương 10: Cây nhị phânCây liên kết 10 Chương 10: Cây nhị phânThiết kế cây liên kết template struct Binary_node { // data members: Entry data; Binary_node *left, *right; // constructors: Binary_node( ); Binary_node(const Entry &x); }; template class Binary_tree { public: // Add methods here. protected: // Add auxiliary function prototypes here. Binary_node *root; }; 11 Chương 10: Cây nhị phânKhởi tạo và kiểm tra rỗng template Binary_tree::Binary_tree() { root = NULL; }; template bool Binary_tree::empty() { return root == NULL; }; 12 Chương 10: Cây nhị phânThiết kế các phép duyệt cây template void Binary_tree :: inorder(void (*visit)(Entry &)) { recursive_inorder(root, visit); } template void Binary_tree :: preorder(void (*visit)(Entry &)) { recursive_preorder(root, visit); } template void Binary_tree :: postorder(void (*visit)(Entry &)) { recursive_postorder(root, visit); } 13 Chương 10: Cây nhị phânGiải thuật duyệt cây inorder Algorithm recursive_inorder Input: subroot là con trỏ node gốc và hàm visit Output: kết quả phép duyệt 1. if (cây con không rỗng) 1.1. Call recursive_inorder với nhánh trái của subroot 1.2. Duyệt node subroot bằng hàm visit 1.3. Call recursive_inorder với nhánh phải của subroot End recursive_inorder 14 Chương 10: Cây nhị phânMã C++ duyệt cây inorder template void Binary_tree ::recursive_inorder ...
Tìm kiếm theo từ khóa liên quan:
cây nhị phân tìm kiếm ưu điểm cây nhị phân định hướng tìm kiếm cấu trúc dữ liệu tạo cây rỗng gán trường dữ liệu cây đa phânGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 317 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 161 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 150 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 143 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 139 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 123 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 74 0 0 -
Ứng dụng và cài đặt cấu trúc dữ liệu bằng C: Phần 1
338 trang 72 0 0 -
49 trang 70 0 0
-
54 trang 69 0 0