Tìm hiểu Cấu trúc dữ liệu - Chapter 5
lượt xem 26
download
Tài liệu tham khảo về môn cấu trúc dữ liệu
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Tìm hiểu Cấu trúc dữ liệu - Chapter 5
- Môn: CẤU TRÚC DỮ LIỆU Chương 5: CÂY (TREE) 1
- NỘI DUNG CHƯƠNG 5 1. Khái niệm cây – Biểu diễn cây 2. Cây nhị phân (Binary Tree) 1. Định nghĩa 2. Biểu diễn và các thao tác 3. Cây nhị phân tìm kiếm (Binary Searching Tree) 3. Cây cân bằng (Balanced Tree) 1. Định nghĩa – Cấu trúc dữ liệu 2. Các thao tác trên cây cân bằng BÀI TẬP 2
- 1.Khái niệm cây – Biểu diễn cây 1.1 Định nghĩa cây 1.2. Một số khái niệm liên quan 1.2.a. Bậc của 1 cây 1.2.b. Bậc của 1 nút 1.2.c. Nút gốc 1.2.d. Nút kết thúc 1.2.e. Nút trung gian 1.2.f. Mức của 1 nút 1.2.g. Chiều cao (chiều sâu) của 1 cây 1.2.h. Nút trước, nút sau của 1 nút 1.2.i. Nút cha, nút con của 1 nút 1.2.j. Chiều dài đường đi của 1 nút 1.2.k. Chiều dài đường đi của 1 cây 1.2.l. Rừng 3
- 1.Khái niệm cây – Biểu diễn cây (tt) 1.1 Định nghĩa cây Cây là một tập hợp các phần tử (nút) được tổ chức và có các đặc điểm Hoặc là tập hợp rỗng (cây rỗng) Hoặc là tập hợp khác rỗng trong đó có 1 nút duy nhất làm nút gốc (Root’s Node), các nút còn lại được phân thành các nhóm trong đó mỗi nhóm là 1 cây con (Sub-Tree) Các cây con cũng có thể là tập rỗng hay khác rỗng trong đó có 1 nút là gốc cây con. 4
- 1.Khái niệm cây – Biểu diễn cây (tt) 1.2. Một số khái niệm liên quan 1.2.a. Bậc của 1 nút Bậc của 1 nút (node’s degree) là số cây con của nút đó 1.2.b. Bậc của 1 cây Bậc của 1 cây (tree’s degree) là bậc lớn nhất của các nút trong cây Cây có bậc N gọi là cây N-phân 1.2.c. Nút gốc Nút gốc (root’s tree) là nút không phải là nút gốc cây con của bất kỳ 1 cây con nào khác trong cây (nút không làm gốc cây con) 1.2.d. Nút kết thúc Nút kết thúc hay còn gọi nút lá (leaf’s node) là nút có bậc = 0 (nút không có nút cây con) 5
- 1.Khái niệm cây – Biểu diễn cây (tt) 1.2. Một số khái niệm liên quan (tt) 1.2.e. Nút trung gian Nút trung gian hay còn gọi nút giữa (interior’s node) là nút không phải là nút gốc và cũng không phải nút kết thúc (nút có bậc khác không và là nút gốc của cây con nào đó trong cây) 1.2.f. Mức của 1 nút Mức của 1 nút (node’s level) bằng mức của nút gốc cây con chứa nó +1. Mức của nút gốc = 1 1.2.g. Chiều cao (chiều sâu) của 1 cây Chiều cao (chiều sâu) của 1 cây (tree’s height | tree’s depth) là mức cao nhất của 1 nút trong cây 1.2.h. Nút trước, nút sau của 1 nút Nút T được gọi là nút trước của 1 nút (ancestor’s node) của nút S nếu cây con có gốc là T chứa cây con có gốc là S. Khi đó S được gọi là nút sau của nút T (descendant’s node) 6
- 1.Khái niệm cây – Biểu diễn cây (tt) 1.2. Một số khái niệm liên quan (tt) 1.2.i. Nút cha, nút con của 1 nút Nút B được gọi là nút cha (parent’s node) của nút C nếu nút B là nút trước của nút B và mức của nút C lớn hơn mức của B là 1 mức. Khi đó nút C được gọi là nút con (child’s node) của B 1.2.j. Chiều dài đường đi của 1 nút Chiều dài đường đi của 1 nút là số đỉnh (số nút) tính từ nút gốc để đi đến nút đó. Chiều dài đường đi của nút gốc luôn = 1, chiều dài đường đi tới 1 nút bằng chiều dài đường đi tới nút cha của nó + 1 7
- 1.Khái niệm cây – Biểu diễn cây (tt) 1.2. Một số khái niệm liên quan (tt) 1.2.k. Chiều dài đường đi của 1 cây Chiều dài đường đi của 1 cây (path’s length of the tree) là tổng tất cả các chiều dài đường đi của tất cả các nút trên cây (chiều dài đường đi trong internal path’s length). Tính chiều dài đường đi ngoài (external path’s length) bằng cách mở rộng tất cả các nút của cây sao cho các nút của cây có cùng bậc (thêm vào các nút giả) với bậc của cây. Chiều dài đường đi ngoài bằng tổng chiều 1.2.l. Rừng. Rừng (forest) là tập hợp các cây. Khi cây mất gốc rừng 8
- 1.Khái niệm cây – Biểu diễn cây (tt) 1.3. Biểu diễn cây Dùng đồ thị, Dùng giản đồ tập hợp, Sử dụng dạng phân cấp chỉ số BIỂU DIỄN CÂY TRONG BỘ NHỚ MÁY TÍNH Để biểu diễn cây trong bộ nhớ máy tính dùng danh sách liên kết. Để biểu diễn cây N-phân dùng danh sách có N mối liên kết để quản lý N địa chỉ nút con. Cấu trúc dữ liệu của cây N-phân tương tự cấu trúc dữ liệu đa liên kết. const int N = 100; typedef struct NTNode { T Key; NTNode * SubNode[N]; }NTOneNode; typedef struct NTOneNode * NTType; Để quản lý cây, chỉ cần quản lý địa chỉ nút gốc NTType NTree; 9
- 2. Cây nhị phân (Binary Tree) 2.1. Định nghĩa Cây nhị phân là cây có bậc bằng 2 (bậc của nút tối đa bằng 2) 10
- 2. Cây nhị phân (Binary Tree) 2.2. Biểu diễn và các thao tác Để biểu diễn cây nhị phân trong bộ nhớ máy tính dùng danh sách có 2 mối liên kết để quản lý địa chỉ 2 nút con (cây con trái và cây con phải). Như vậy cấu trúc dữ liệu của cây nhị phân tương tự cấu trúc dữ liệu của danh sách liên kết đôi nhưng cách thức liên kết khác: typedef struct BinTNode { T Key; BinTNode * BinTLeft; BinTNode * BinTRight; }BinTOneNode; typedef BinTOneNode * BinTType; Để quản lý cây nhị phân chỉ cần quản lý địa chỉ nút gốc BinTType BinTree; 11
- 2. Cây nhị phân (Binary Tree) 2.2. Biểu diễn và các thao tác (tt) Các thao tác trên cây nhị phân bao gồm: a. Khởi tạo cây nhị phân b. Tạo mới 1 nút c. Thêm 1 nút vào cây nhị phân d. Duyệt qua các nút trên cây nhị phân e. Tính chiều cao của cây f. Tính số nút của cây g. Hủy 1 nút trên cây nhị phân 12
- 2. Cây nhị phân (Binary Tree) 2.2. a. Khởi tạo cây nhị phân Khởi tạo cây nhịn phân: cho con trỏ quản lý địa chỉ nút gốc về con trỏ NULL BinTType BinTreeInitialize(BinTType & BTree) { BTree = NULL return (BTree ); } 13
- 2. Cây nhị phân (Binary Tree) 2.2. b. Tạo mới 1 nút Thuật toán B1: BTNode = new BinTOneNode B2: IF (BTNode == NULL) Key BTNode Thực hiện BKT NULL NULL B3: BTNode ->BinTLeft = NULL B4: BTNode ->BinTRight = NULL B5: BTNode -> Key = NewData BKT: Kết thúc 14
- 2. Cây nhị phân (Binary Tree) 2.2. b. Tạo mới 1 nút (tt) Cài đặt thuật toán trong C++ BinTType BinTreeCreateNode(T NewData) { BinTType BTnode = new BinTOneNode; if (BTnode != NULL) { BTnode-> BinTLeft = NULL; BTnode-> BinTRight = NULL; BTnode-> Key = NewData; } return (BTnode); } 15
- 2. Cây nhị phân (Binary Tree) 2.2. c. Thêm 1 nút vào cây nhị phân (Thêm trái nhất) – Thuật toán B1: NewNode = BinTreeCreateNode(NewData) B2: IF (NewNode == NULL) Thực hiện BKT B3: IF (BinTree == NULL) B3.1: BinTree = NewNode B3.2: Thực hiện BKT B4: Lnode = BinTree B5: IF (Lnode->BinTLeft == NULL) B5.1: Lnode-> BinTLeft = NewNode B5.2: Thực hiện BKT B6: Lnode = Lnode ->BinTLeft B7: Lặp lại B5 BKT: Kết thúc 16
- 2. Cây nhị phân (Binary Tree) 2.2. c. Thêm 1 nút vào cây nhị phân (Thêm trái nhất) Cài đặt thuật toán bằng C++ BinTType BinTreeAddLeft (BinTType &BTTree, T NewData) { BinTType NewNode = BinTreeCreateNode (NewData); if (NewNode == NULL) return (NewNode); if (BTTree == NULL) BTTree = NewNode; else { BinTType Lnode = BTTree; while (Lnode->BinTLeft != NULL) Lnode = Lnode->BinTLeft; Lnode->BinTLeft = NewNode; } return (NewNode); } 17
- 2. Cây nhị phân (Binary Tree) 2.2. c. Thêm 1 nút vào cây nhị phân (Thêm phải nhất)-Thuật toán B1: NewNode = BinTreeCreateNode(NewData) B2: IF (NewNode == NULL) Thực hiện BKT B3: IF (BinTree == NULL) B3.1: BinTree = NewNode B3.2: Thực hiện BKT B4: Rnode = BinTree B5: IF (Rnode->BinTRight == NULL) B5.1: Rnode->BinTRight = NewNode B5.2: Thực hiện BKT B6: Rnode = Rnode ->BinTRight B7: Lặp lại B5 BKT: Kết thúc 18
- 2. Cây nhị phân (Binary Tree) 2.2. c. Thêm 1 nút vào cây nhị phân (Thêm phải nhất) Cài đặt thuật toán bằng C++ BinTType BinTreeAddRight (BinTType &BTTree, T NewData) { BinTType NewNode = BinTreeCreateNode (NewData); if (NewNode == NULL) return (NewNode); if (BTTree == NULL) BTTree = NewNode; else { BinTType Rnode = BTTree; while (Rnode->BinTRight != NULL) Rnode = Rnode->BinTRight; Rnode->BinTRight = NewNode; } return (NewNode); } 19
- 2. Cây nhị phân (Binary Tree) 2.2. d. Duyệt qua các nút trên cây nhị phân Duyệt theo thứ tự nút gốc trước (Preoder): nút gốc được duyệt trước, sau đó mới duyệt đến 2 nút con. Có 2 cách: Duyệt nút gốc, duyệt cây con bên trái, duyệt cây con bên phải (Root - Left - Right) Duyệt nút gốc, duyệt cây con bên phải, duyệt cây con bên trái (Root - Right - Left) Duyệt theo thứ tự nút gốc giữa (Inoder): duyệt 1 trong 2 cây con trước rồi duyệt nút gốc sau đó mới duyệt cây con còn lại. Có 2 cách: Duyệt cây con bên trái, duyệt nút gốc, duyệt cây con bên phải (Left - Root - Right) Duyệt cây con bên phải, duyệt nút gốc, duyệt cây con bên trái (Right - Root - Left) Duyệt theo thứ tự nút gốc sau (Postoder): Nút gốc sẽ được duyệt sau cùng sau khi duyệt 2 cây con. Duyệt cây con bên trái, duyệt cây con bên phải, duyệt nút gốc(Left – Right - Root) Duyệt cây con bên phải, duyệt cây con bên trái, duyệt nút gốc(Right - Left- Root ) 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình cấu trúc dữ liệu và giải thuât part 1
16 p | 825 | 365
-
Giáo trình cấu trúc dữ liệu và giải thuật_Chương 5: Cây nhiều nhánh tìm kiếm
24 p | 571 | 244
-
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - CHƯƠNG 7: CÂY NHỊ PHÂN TÌM KIẾM
19 p | 147 | 20
-
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 2: Tìm kiếm và sắp xếp
79 p | 100 | 17
-
Bài giảng môn học Cấu trúc Dữ liệu và Giải thuật: Phần 1
21 p | 204 | 16
-
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 3: Tìm kiếm
33 p | 118 | 15
-
Tài liệu hướng dẫn thực hành môn Cấu trúc dữ liệu và giải thuật - Bài 4: Cây nhị phân tìm kiếm
8 p | 103 | 10
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4 - ThS. Nguyễn Thị Khiêm Hòa (ĐH Ngân hàng TP.HCM)
55 p | 119 | 8
-
Giáo trình Cấu trúc dữ liệu và Thuật giải 2: Phần 2 - Ng.Thị Thanh Bình, Ng.Văn Phúc
35 p | 135 | 8
-
Bài giảng Phân tích thiết kế giải thuật và cấu trúc dữ liệu: Phần 2 - ĐH CNTT&TT
36 p | 82 | 7
-
Bài giảng Phân tích thiết kế giải thuật và cấu trúc dữ liệu: Phần 1 - ĐH CNTT&TT
56 p | 110 | 7
-
Cấu trúc dữ liệu & giải thuật: Phần 2
123 p | 47 | 7
-
Bài giảng Cấu trúc dữ liệu: Chương 9 - Nguyễn Xuân Vinh
66 p | 78 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - GV. Nguyễn Minh Thành
23 p | 96 | 5
-
Bài giảng Cấu trúc dữ liệu: Phần 2 - ĐH Cần Thơ
79 p | 92 | 5
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 1: Một số khái niệm cơ bản về cấu trúc dữ liệu và giải thuật
12 p | 91 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 7 - Châu Thị Bảo Hà
133 p | 113 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật - Giới thiệu môn học
13 p | 61 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn