Cấu trúc dữ liệu và giải thuật (chương 10) docx

51 799 0
Cấu trúc dữ liệu và giải thuật (chương 10) docx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

A C CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040) B F D E Chương 10: Cây nhị phân G K H Định nghĩa Cây nhị phân Cây rỗng Hoặc có node gọi gốc (root) gọi trái phải Ví dụ: Cây rỗng: Cây có node: node gốc Cây có node: ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân Các định nghĩa khác Mức: Node gốc mức Node gốc của node mức m m+1 Chiều cao: Cây rỗng Chiều cao lớn cộng (Hoặc: mức lớn node cộng 1) Đường (path) Tên node trình từ node gốc theo đến node ĐH Bách Khoa Tp.HCM Khoa Cơng nghệ Thơng tin Chương 10 Cây nhị phân Các định nghĩa khác (tt.) Node trước, sau, cha, con: Node x trước node y (node y sau node x), đường đến y có x Node x cha node y (node y node x), đường đến y node x nằm trước node y Node lá, trung gian: Node node Node trung gian khơng node gốc hay node ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân Các tính chất khác Cây nhị phân đầy đủ, gần đầy đủ: Đầy đủ: node nằm mức cao nút khơng nút có đầy đủ nhánh Gần đầy đủ: Giống node nằm mức cao (hoặc trước mức) lấp đầy từ bên trái sang bên phải mức cao Chiều cao có n node: Trung bình h = [lg n] + Đầy đủ h = lg (n + 1) Suy biến h = n Số phần tử mức i nhiều 2i ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân Phép duyệt Duyệt qua node (mỗi node lần) Cách duyệt: Chính thức: NLR, LNR, LRN, NRL, RNL, RLN Chuẩn: NLR (preorder), LNR (inorder), LRN (postorder) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân Ví dụ phép duyệt NLR A B C D E H I N J F G K O L M P Kết quả: A B D H I N E J O K C F L P G M ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân Ví dụ phép duyệt LNR A B C D E H I N J F G K O L M P Kết quả: H D N I B J O E K A F P L C M G ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thơng tin Chương 10 Cây nhị phân Ví dụ phép duyệt LRN A B C D E H I N J F G K O L M P Kết quả: H N I D O J K E B P L F M G C A ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân Cây liên kết ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 10 Mã C++ xóa node template Error_code Search_tree :: remove_root (Binary_node * &sub_root) { if (sub_root == NULL) return not_present; Binary_node *to_delete = sub_root; if (sub_root->right == NULL) sub_root = sub_root->left; else if (sub_root->left == NULL) sub_root = sub_root->right; else { to_delete = sub_root->left; Binary_node *parent = sub_root; while (to_delete->right != NULL) { parent = to_delete; to_delete = to_delete->right; } sub_root->data = to_delete->data; if (parent == sub_root) sub_root->left = to_delete->left; else parent->right = to_delete->left; } delete to_delete; return success; } ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 37 Cây cân chiều cao - AVL Cây cân hoàn toàn: Số node nhánh trái nhánh phải chênh không ĐN AVL: BST Tại node bất kỳ, chiều cao nhánh trái nhánh phải chênh không Ký hiệu cho node AVL: Node cân bằng: ‘-’ Nhánh trái cao hơn: ‘/’ Nhánh phải cao hơn: ‘\’ ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 38 Ví dụ AVL Cây AVL Khơng phải AVL ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 39 Khai báo AVL enum Balance_factor { left_higher, equal_height, right_higher }; template struct AVL_node: public Binary_node { // additional data member: Balance_factor balance; AVL_node( ); AVL_node(const Record &x); void set_balance(Balance_factor b); Balance_factor get_balance( ) const; }; template class AVL_tree: public Search_tree { public: Error_code insert(const Record &new data); Error_code remove(const Record &old data); private: // Add auxiliary function prototypes here }; ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 40 Ví dụ thêm vào AVL ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thơng tin Chương 10 Cây nhị phân 41 Ví dụ thêm vào AVL \\ m – k \ – p t \ u – v (1) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 42 Ví dụ thêm vào AVL (tt.) \\ m – k \ (2) – p t \ u – v Viết gọn ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 43 Các trạng thái thêm vào – / Thêm vào bên phải làm bên phải cao lên Thêm vào bên phải làm bên phải cao lên \ – Chiều cao tăng ĐH Bách Khoa Tp.HCM Chiều cao không đổi Khoa Công nghệ Thông tin \ Thêm vào bên phải làm bên phải cao lên \\ Mất cân bên phải Chương 10 Cây nhị phân 44 Cân AVL – Quay đơn Binary_node *right_tree = root->right; Binary_node *right_tree = root->right; root->right = right_tree->left; root->right = right_tree->left; right_tree->left = root; right_tree->left = root; root = right_tree; root = right_tree; ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 45 Cân AVL – Quay kép Binary_node *right_tree = root->right; Binary_node *right_tree = root->right; Binary_node *sub_tree = right_tree->left; Binary_node *sub_tree = right_tree->left; root->right = sub_tree->left; root->right = sub_tree->left; right_tree->left = sub_tree->right; right_tree->left = sub_tree->right; sub_tree->left = root; sub_tree->left = root; sub_tree->right = right_tree; sub_tree->right = right_tree; root = sub_tree; root = sub_tree; Hoặc: Hoặc: rotate_right(right_tree); rotate_right(right_tree); rotate_left(root); rotate_left(root); ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 46 Các trạng thái xóa node ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 47 Các trạng thái xóa node (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 48 Các trạng thái xóa node (tt.) ĐH Bách Khoa Tp.HCM Khoa Cơng nghệ Thơng tin Chương 10 Cây nhị phân 49 Ví dụ xóa node AVL ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 50 Ví dụ xóa node AVL (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 51 ... phân 27 Thêm vào BST ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 10 Cây nhị phân 28 Giải thuật thêm vào BST Algorithm BST_insert Input: subroot node gốc new_data liệu cần thêm vào Output:... nhị phân 30 Algorithm BST_insert Input: subroot node gốc new_data liệu cần thêm vào Output: BST sau thêm vào Giải thuật thêm vào BST (không đệ qui) parent rỗng left_or_right “left” while (subroot... thêm vào if (cây rỗng) 1.1 Thêm vào vị trí if (target trùng khóa với subroot) 2.1 return duplicate_error if (new_data có khóa nhỏ khóa subroot) 3.1 Thêm vào bên nhánh trái subroot else 4.1 Thêm vào

Ngày đăng: 13/07/2014, 21:20

Từ khóa liên quan

Mục lục

  • CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040)

  • Định nghĩa

  • Các định nghĩa khác

  • Các định nghĩa khác (tt.)

  • Các tính chất khác

  • Phép duyệt cây

  • Ví dụ về phép duyệt cây NLR

  • Ví dụ về phép duyệt cây LNR

  • Ví dụ về phép duyệt cây LRN

  • Cây liên kết

  • Thiết kế cây liên kết

  • Khởi tạo và kiểm tra rỗng

  • Thiết kế các phép duyệt cây

  • Giải thuật duyệt cây inorder

  • Mã C++ duyệt cây inorder

  • Khai báo cây nhị phân

  • Cây nhị phân tìm kiếm – Binary search tree (BST)

  • Ví dụ BST

  • Các tính chất khác của BST

  • Thiết kế BST

Tài liệu cùng người dùng

Tài liệu liên quan