Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 102 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
102
Dung lượng
620,5 KB
Nội dung
Tree Structure 2008 Nội dung Cấu trúc Cây nhị phân Cây nhị phân tìm kiếm Cây nhị phân tìm kiếm cân AVL Phần mở rộng (cây n-phân) 2008 Cây Top-Down B-Tree Cấu trúc liệu 2008 Cấu trúc Tập hợp nút cạnh nối nút Có nút gọi gốc Quan hệ one-to-many nút Có đường từ gốc đến nút Các loại cây: 2008 Nhị phân: nút có {0,1, 2} nút Tam phân: nút có {0,1,2,3} nút n-phân: nút có {0,1, ,n} nút Cấu trúc Sao máy tính, lại thể ngược? 2008 Khái niệm Cạnh nút Z B Q 2008 gốc J A R K D A F L Lá Khái niệm Thuật ngữ Nút gốc: nút cha Nút lá: nút Nút trong: nút nút gốc Chiều cao: khoảng cách từ gốc đến Nút gốc Nút Chiều cao Nút 2008 Khái niệm Root Node A Node C Node H Node B Node D Node E Node I Node F Node J Node G Node K Node L Cây 2008 Nút anh em Nội dung 2008 Cấu trúc Cây nhị phân Cây nhị phân tìm kiếm Cây nhị phân tìm kiếm cân AVL Binary Tree Cấu trúc đơn giản Tại nút gồm thành phần Phần data: chứa giá trị, thông tin… Liên kết đến nút trái (nếu có) Liên kết đến nút phải (nếu có) Cây nhị phân rỗng (ko có nút nào) Cây NP khác rỗng có nút gốc 2008 Có đường từ gốc đến nút Nút nút bên trái bên phải nút 10 Cây AVL Minh họa số 1 (T1) -1 -1 (T2) 0 -1 Độ cao rỗng -1 -1 (T3) -1 -1 88 0 (T4) (T5) 2008 -1 0 Cây AVL Thêm nút vào ⇒ phức tạp Thêm nút vào giống thêm vào NPTK Tính lại số cân nút có ảnh hưởng Sau xét có bị cân ko, có phải cân lại 2008 Cân nút theo phép xoay thích hợp! 89 Cây AVL Khảo sát việc thêm nút vào Sau thêm vào nút nút Có thể cân ? Trường hợp ko ? Nguyên nhân: 2008 Lệch trái: cân nút thêm vào vị trí sau bên trái nút trước gần bị lệnh trái Lệch phải: ngược với lệch trái 90 Cây AVL -1 0 0 0 B1 U2 U3 U4 U5 2008 0 B2 U1 -1 U6 U7 B3 U8 B4 B5 B6 U9 91 0 U10 U11 U12 Cây AVL Xoay để cân lại r p T1 h=n 2008 T3 h=n T2 h=n 92 Cây AVL Khi thêm x vào T1 r p T1 h=n T3 h=n T2 h=n x 2008 93 Cây AVL Sau cân p h = n+1 T1 h=n x 2008 T2 h=n r T3 h=n 94 Cây AVL Thêm vào T2 nào? r p T1 h=n 2008 T3 h=n T2 h=n 95 Cây AVL Khi thêm x vào T2 r p -1 T1 h=n T3 h=n T2 h=n x 2008 96 Cây AVL Khi thêm x vào T2: xoay kép p Xoay lần xoay trái P Xoay lần xoay phải r r -1 T3 h=n 1 T1 h=n T2-1 h=n-1 q T2-2 h=n-1 x 2008 97 Cây AVL Khi thêm x vào T2 q T3 h=n p T1 h=n r T2-2 h=n-1 T2-1 h=n-1 x 2008 98 Cây AVL Khi thêm x vào T2 q p T1 h=n -1 T2-1 h=n-1 T2-2 h=n-1 r T3 h=n x 2008 99 Cây AVL Tóm lại: thêm vào AVL Khi thêm vào bị cân Thực cân lại, có trường hợp 2008 Có thể dùng phép xoay Dùng phép xoay trường hợp Trường hợp lệch bên phải tương tự (đối xứng) 100 Cây AVL Cài đặt AVL: Bổ sung thêm trường bf cho cấu trúc BST typedef struct node { DataType info; int bf; struct node * left; struct node * right; } NODE; typedef NODE * NodePtr; NodePtr pAVLTree; 2008 Chỉ số cân balance factor Trỏ nút gốc AVL 101 Cây AVL Các thao tác AVL tương tự BST Khác biệt thêm/xoá làm cân Ảnh hưởng đến số cân nhánh liên quan Sử dụng thao tác xoay phải, trái để cân Sinh viên tự tìm hiểu & đọc thêm phần AVL 2008 102 [...]... phải > nút gốc 5 5 4 10 8 20 30 Binary Search Tree Ví dụ 5 10 2 25 45 45 5 30 Binary search trees 2008 45 2 30 5 10 25 2 30 10 25 Non-binary search tree 31 Binary Search Tree x=9 10>9, left 5 25, left 45 2 25 = 25, found 5 < 25, right 45 30 10 45 > 25, left 30 > 25, left 10 < 25, right 25 = 25, found 25 2008 34 Binary Search Tree Thời gian tìm kiếm Dựa trên chiều cao của cây Cây cân bằng Cây ko cân bằng 2008 O(log(n)) O(n) Tương tự tìm kiếm trên danh sách, mảng ko sắp 35 Binary Search... Đếm số nút lá: CountLeaf Đếm số nút trên cây: CountNode Đếm số nút trong: CountInnerNode Xác định độ sâu/chiều cao của cây Tìm giá trị nhỏ nhất/lớn nhất trên cây Tính tổng các giá trị trên cây Đếm số nút có giá trị bằng x 28 Nội dung Cấu trúc cây Cây nhị phân Cây nhị phân tìm kiếm Cây nhị phân tìm kiếm cân bằng AVL 2008 29 Binary Search Tree BST là cây nhị phân mà mỗi nút thoả Giá trị... gian = ? Biết số nút tính d của cây NP đầy đủ d+1 B D 2008 C E F 13 G Binary Tree Duyệt cây: Do cây là cấu trúc ko tuyến tính 3 cách duyệt cây NP 2008 Duyệt theo thứ tự trước PreOrder: NLR Duyệt theo thứ tự giữa InOrder: LNR Duyệt theo thứ tự sau PostOrder: LRN 14 Binary Tree PreOrder: InOrder: PostOrder: A B D E H 2008 C F I G J K 15 Binary Tree Cài đặt cây NP dùng liên kết typedef struct...Binary Tree Kích thước = 9 (số nút) Mức 0 A Cây con phải Cây con trái Mức 1 Mức 2 Mức 3 2008 B D C E H F I G Độ sâu/chiều cao = 3 11 Binary Tree Cây nhị phân đúng: Nút gốc và nút trung gian có đúng 2 con Cây nhị phân đúng có n nút lá thì số nút trên cây 2n-1 A B D E H 2008 C F I G J K 12 Binary Tree Cây nhị phân đầy đủ với chiều sâu d Phải là cây nhị phân đúng Tất cả nút lá có chiều sâu... DataType info; struct node * left; struct node * right; } NODE; typedef NODE * NodePtr; NodePtr 2008 pTree; Chứa thông tin của nút Cấu trúc của một nút Trỏ đến nút con phải Trỏ đến nút con trái Trỏ nút gốc của cây NP 16 Binary Tree pTree Con trỏ pTree trỏ đến nút gốc của cây 8 5 1 3 9 2008 10 4 20 7 17 Binary Tree Các thao tác: NewNode, CreateNode, FreeNode, Init, IsEmpty InsertLeft, InsertRight... sắp 35 Binary Search Tree Search Xuất phát từ gốc 2008 Nếu nút = NULL => ko tìm thấy Nếu khoá x = khóa nút gốc => tìm thấy Ngược lại nếu khoá x < khoá nút gốc => Tìm trên cây bên trái Ngược lại => tìm trên cây bên phải 36 ... pTree->info); InOrder(pTree->right); } } 2008 24 Binary Tree PostOder void PostOrder(NodePtr pTree) { if (pTree != NULL) { PostOrder(pTree->left); PostOrder(pTree->right); printf(“%d ”, pTree->info); } } 2008 25 Binary Tree Search: tìm nút có khoá x NodePtr Search(NodePtr pTree, int x) { NodePtr p; if (pTree == NULL) return NULL; if (pTree->info == x) return pTree; p = Search(pTree->left, x); if (p == NULL) ... Delete: nút 10 cách 50 55 10 25 55 Xóa 10 30 50 45 30 25 45 Chọn nút có khoá lớn bên trái 2008 45 Binary Search Tree Delete: nút 10 cách 50 55 10 25 45 55 25 Xóa 10 30 50 30 45 Chọn nút nhỏ bên... Search Tree Tìm ( 25) 10 10 < 25, right 30 25 30 > 25, left 45 25 = 25, found < 25, right 45 30 10 45 > 25, left 30 > 25, left 10 < 25, right 25 = 25, found 25 2008 34 Binary Search Tree Thời...Nội dung Cấu trúc Cây nhị phân Cây nhị phân tìm kiếm Cây nhị phân tìm kiếm cân AVL Phần mở rộng (cây n-phân) 2008 Cây Top-Down B-Tree Cấu trúc liệu 2008 Cấu trúc Tập hợp