Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 66 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
66
Dung lượng
507,09 KB
Nội dung
GV: NGUYỄN XUÂN VINH CẤU TRÚC DỮ LIỆU DATA STRUCTURES MÔN: CẤU TRÚC DỮ LIỆU [214331] TREE Nguyễn Xuân Vinh /XX 12/3/15 nguyenxuanvinh@hcmuaf.edu.vn /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Cấu trúc liệu Linear - Hierarchical structures Cấu trúc Cây nhị phân Cây nhị phân tìm kiếm /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Nội dung - GV: NGUYỄN XUÂN VINH 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: 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 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Cấu trúc - /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Cấu trúc /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Khái niệm Cạnh Q - J Z B K A gốc nút A R D F L Lá MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Thuật ngữ Root node: nút gốc: nút cha Leaf node: nút lá: nút Internal node: nút trong: nút nút gốc Height: chiều cao: khoảng cách từ gốc đến Parent node (or ancestor, or superior): nút cha Child nodes (successor): nút Nút gốc /XX 12/3/15 Nút Chiều cao Nút - GV: NGUYỄN XUÂN VINH Thuật ngữ Root MÔN: CẤU TRÚC DỮ LIỆU Node A Node C Node E Node I Node F Node J Node G Node K 12/3/15 Node H Node D Node B /XX Node L Cây - Nút anh em GV: NGUYỄN XUÂN VINH Ví dụ /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU • Một số loại thường gặp: – – – – Cây nhị phân Cây định Cây biểu thức Cây đỏ đen GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 10 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 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Minh họa xóa (25) 52 MÔN: CẤU TRÚC DỮ LIỆU P 25 66 15 19 27 60 42 58 52 31 - 99 62 /XX 12/3/15 39 52 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Minh họa xóa (25) 52 MÔN: CẤU TRÚC DỮ LIỆU P 25 66 f 15 39 19 27 42 58 /XX 31 53 rp - 99 62 12/3/15 60 53 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Minh họa xóa (25) 52 MÔN: CẤU TRÚC DỮ LIỆU P 27 66 f 15 39 19 27 42 58 /XX 31 54 rp - 99 62 12/3/15 60 54 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Minh họa xóa (25) 52 MÔN: CẤU TRÚC DỮ LIỆU P 27 15 39 19 25 /XX 55 31 - 60 42 12/3/15 66 f 58 99 62 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Minh họa xóa (25) 52 MÔN: CẤU TRÚC DỮ LIỆU P 27 12/3/15 15 39 19 31 60 42 99 58 62 56 /XX 66 f - 56 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Trường hợp đặc biệt: f 52 f == p MÔN: CẤU TRÚC DỮ LIỆU P Nút mạng rp nút phải nút p cần xoá 25 15 39 19 42 57 /XX 12/3/15 rp - 57 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Trường hợp đặc biệt: f 52 f == p MÔN: CẤU TRÚC DỮ LIỆU P Nút mạng rp nút phải nút p cần xoá 39 rp - Đưa giá trị nút rp lên nút p 12/3/15 15 19 42 58 /XX 39 - 58 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Trường hợp đặc biệt: f 52 f == p MÔN: CẤU TRÚC DỮ LIỆU P Nút mạng rp nút phải nút p cần xoá 39 rp - Chuyển liên kết phải p đến liên kết phải rp 15 19 42 59 /XX 12/3/15 39 - 59 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Trường hợp đặc biệt: f 52 f == p MÔN: CẤU TRÚC DỮ LIỆU P Nút mạng rp nút phải nút p cần xoá 39 rp - Xoá nút rp 15 60 /XX 12/3/15 - 39 19 42 GV: NGUYỄN XUÂN VINH Binary Search Tree: Delete Trường hợp đặc biệt: f 52 f == p MÔN: CẤU TRÚC DỮ LIỆU P Nút mạng rp nút phải nút p cần xoá 39 - Sau xoá 15 19 61 /XX 12/3/15 42 - 61 Remove (NodePtr T, int x) Nếu T = NULL ⇒ thoát Nếu T->info > x ⇒ Remove(T->left, x) Nếu T->info right, x) Nếu T->info = x P = T Nếu T có nút T trỏ đến nút Ngược lại có Gọi f = p rp = p->right; Tìm nút rp cho rp->left = null nút f nút cha nút rp Thay đổi giá trị nội dung T rp Nếu f = p (trường hợp đặc biệt) thì: f->right = rp->right; Ngược lại: f->left = rp->right; P = rp; // p trỏ tới rp để xoá Xoá P 62 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Search Tree - 62 Cài đặt cấu trúc liệu liên kết cho nhị phân tìm kiếm Cài đặt thao tác xây dựng cây: NewNode, Init, IsEmpty, CreateNode Cài đặt thao tác cập nhật: Insert, Remove, ClearTree Xuất danh sách tăng dần giảm dần Kiểm tra xem có phải nhị phân Kiểm tra xem có phải nhị phân đầy đủ Xác định nút cha nút chứa khoá x Đếm số nút lá, nút giữa, kích thước Xác định độ sâu/chiều cao 10 Tìm giá trị nhỏ nhất/lớn 11 Tính tổng giá trị 63 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Bài tập - 63 Tài liệu tham khảo http://en.wikipedia.org/wiki/B-tree http://www.bluerwhite.org/btree/ http://www.nist.gov/dads/HTML/btree.html http://www.nist.gov/dads/HTML/bstartree.html 64 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Đọc thêm 64 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 65 Tóm tắt Trong chương này, cần phải nắm vững vấn đề sau: Cây Cây nhị phân Cây nhị phân tìm kiếm Các phép toán: Create, Insert, Delete (remove) 66 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH HỎI ĐÁP [...]... MÔN: CẤU TRÚC DỮ LIỆU node new 26 /XX 12/3/15 X - 26 InsertLeft: thêm nút con bên trái nút p 27 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Tree - 27 InsertRight: thêm một nút con bên phải p 28 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Tree - 28 DeleteLeft: xoá nút con bên trái của p, nút này phải là nút lá 29 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN... cả các cây 23 GV: NGUYỄN XUÂN VINH Cài đặt cây: bằng danh sách liên kết 8 MÔN: CẤU TRÚC DỮ LIỆU pTree 5 12/3/15 1 10 3 20 7 24 /XX 9 4 - 24 GV: NGUYỄN XUÂN VINH Các thao tác: NewNode, FreeNode, Init, IsEmpty InsertLeft, InsertRight DeleteLeft, DeleteRight PreOrder, InOrder, PostOrder Search ClearTree 25 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Binary Tree - 25 GV: NGUYỄN XUÂN VINH Binary Tree... NGUYỄN XUÂN VINH Binary Tree P S MÔN: CẤU TRÚC DỮ LIỆU D A Pre-order (trước): PDAMSWT Post-order (sau): AMDTWSP In-order (giữa): ADMPSTW M W T 16 /XX 12/3/15 Level-Order (rộng): P D S A M W T - 16 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 17 Cài đặt cây Cây có thể được cài đặt bằng: Mảng Danh sách con Theo con trái nhất và anh em ruột phải Danh sách liên kết GV: NGUYỄN XUÂN VINH. .. không làm việc tốt Nó đòi hỏi ta phải duyệt tất cả các danh sách chứa các nút con 21 22 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Cài đặt cây: bằng danh sách con 22 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 23 Cài đặt cây: theo con trái nhất và anh em ruột phải Các cấu trúc đã dùng để mô tả cây ở trên không trợ giúp phép tạo một cây lớn từ các cây nhỏ hơn (createI) Ta thay... MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Tree Số nút = (2 d+1 A -1) Số nút trung gian = ? Biết số nút tính d của cây NP đầy đủ B E F 14 /XX 12/3/15 D C - 14 G Duyệt cây: Do cây là cấu trúc phi tuyến tính 3 cách duyệt cây nhị phân 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 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH. .. dùng để lưu trữ chỉ số của nút cha Biến data dùng để lưu trữ thông tin của nút đó Một biến maxNode để giữ số nút hiện tại đang có trên cây 19 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Cài đặt cây: bằng mảng 19 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 20 Cài đặt cây: bằng mảng Nhận xét: hàm PARENT(n,T) tốn chỉ một hằng thời gian để lấy ra cha của nút n trong cây T Các... MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Tree - 29 PreOrder: xuất theo thứ tự trước 1 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Tree PreOrder(root) I II 2 B 3 C A 4 F 5 D 6 E visit root For each child k of root preorder(k) A B 30 /XX 12/3/15 Thứ tự: - 30 C F D E GV: NGUYỄN XUÂN VINH Binary Tree InOrder: xuất theo thứ tự giữa MÔN: CẤU TRÚC DỮ LIỆU 3 2 B A 4 6 F D InOrder(root) I... nhị phân (Binary Tree) - 11 GV: NGUYỄN XUÂN VINH 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ÔN: CẤU TRÚC DỮ LIỆU Mức 1 B C Mức 2 E F G Mức 3 Độ sâu/chiều cao = 3 H I 12 /XX 12/3/15 D - 12 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 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Tree A B E F G /XX... NGUYỄN XUÂN VINH Binary Tree PostOder:: xuất theo thứ tự sau MÔN: CẤU TRÚC DỮ LIỆU A B 2 F 6 3 D 5 E 4 PostOrder(root) I For each child k of root postorder(k) visit root C 1 12/3/15 II 32 /XX Thứ tự: C B F E D A - 32 33 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Tree Search: tìm nút có khoá x 33 ClearTree: xóa lần lượt nút bên trái, bên phải và nút cha 34 /XX 12/3/15 MÔN: CẤU... CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Binary Tree - 34 GV: NGUYỄN XUÂN VINH Các thao tác mở rộng khác: Đế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 35 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Binary Tree - 35 Cấu trúc ... ,n} nút /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Cấu trúc - /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Cấu trúc /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Khái niệm Cạnh Q - J... Search Tree: Tìm kiếm (9) 10 x =9 10 >9, left 5