Bài giảng Cấu trúc dữ liệu: Cây nhị nhân - TS. Lê Minh Trung & Th.S Lương Trần Ngọc Khiết

55 18 0
Bài giảng Cấu trúc dữ liệu: Cây nhị nhân - TS. Lê Minh Trung & Th.S Lương Trần Ngọc Khiết

Đ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

Bài giảng Cấu trúc dữ liệu: Cây nhị nhân cung cấp cho người học những kiến thức như: Định nghĩa Cây nhị phân; Phép duyệt cây; Cây liên kết; Thiết kế của Cây nhị phân; Thiết kế Node; Phương thức duyệt cây NLR; Phương thức hủy vùng nhớ đã cấp;...Mời các bạn cùng tham khảo!

TS Lê Minh Trung – ThS Lương Trần Ngọc Khiết Khoa Công nghệ Thông tin, Đại học Sư phạm TP HCM Cay nhi phan (Binary Tree)  Cây nhị nhân (Binary Tree)  Cây nhị phân tìm kiếm (Binary Search Tree)  Cây cân Định nghĩa Cây Nhị Phân  Cây nhị phân  Là node có tối đa hai  Là node có trái phải 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 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 khơng có node  Node trung gian không node gốc hay node 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 Ví dụ  Gốc (root): node Mức  Chiều cao: = lg(15 +1) Mức  Node node cha node Mức Mức 3,4  Node 3,4 node node hai node anh em  Node 11 node lá, node node 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) 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 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 Phương thức Remove void BSTree::Remove(const Key &key) { BinaryNode* subRoot = root, *parent, *toDelete; if(root == nullptr)return; while((subRoot !=nullptr)&&((subRoot -> data).key != key)){ parent = subRoot; if((subRoot ->data).key right; else subRoot = subRoot -> left;} if(subRoot == nullptr)return; toDelete = subRoot; if(subRoot ->left == nullptr){ subRoot = subRoot -> right; if(parent -> left == toDelete)parent -> left = subRoot; else parent ->right = subRoot;} else if(subRoot -> right== null){ subRoot = subRoot -> left; if(parent -> left == toDelete)parent -> left = subRoot; else parent ->right = subRoot; }else{ toDelete = subRoot -> left; parent = subRoot; while(toDelete -> right !=nullptr){ parent = toDelete; toDelete = toDelete -> right;} subRoot -> data = toDelete -> data; if(parent == subRoot)parent -> left= toDelete -> left; else parent -> right = toDelete -> left;} delete toDelete; } 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: ‘\’ Ví dụ AVL Cây AVL Khơng phải AVL Ví dụ thêm vào AVL Ví dụ thêm vào AVL \\ m – k \ – p (1) t \ u – v Ví dụ thêm vào AVL (tt.) \\ m – k (2) – p \ t \ u – v Viết gọn 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 \ Chiều cao tăng / Thêm vào bên phải làm bên phải cao lên – Chiều cao không đổi \ 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 Cân AVL – Quay đơn Binary_node *right_tree = root->right; root->right = right_tree->left; right_tree->left = root; root = right_tree; Cân AVL – Quay kép Binary_node *right_tree = root->right; Binary_node *sub_tree = right_tree->left; root->right = sub_tree->left; right_tree->left = sub_tree->right; sub_tree->left = root; sub_tree->right = right_tree; root = sub_tree; Hoặc: rotate_right(right_tree); rotate_left(root); Các trạng thái xóa node Các trạng thái xóa node (tt.) Các trạng thái xóa node (tt.) Ví dụ xóa node AVL Ví dụ xóa node AVL (tt.) CÁM ƠN VÌ ĐÃ LẮNG NGHE! ... (Binary Tree)  Cây nhị nhân (Binary Tree)  Cây nhị phân tìm kiếm (Binary Search Tree)  Cây cân Định nghĩa Cây Nhị Phân  Cây nhị phân  Là node có tối đa hai  Là node có trái phải nhị phân Các... BinaryNode(Key &k, Value &v); BinaryNode(Record &) ; }; template BinaryNode:: BinaryNode(Record &x){ this -> data = x; this -> left = this->right... if(parent -> left == toDelete)parent -> left = subRoot; else parent -> right = subRoot;} else if(subRoot -> right== null){ subRoot = subRoot -> left; if(parent -> left == toDelete)parent -> left

Ngày đăng: 09/08/2021, 17:44

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

Tài liệu liên quan