Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 72 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
72
Dung lượng
616,5 KB
Nội dung
1
Môn: CẤU TRÚC DỮ LIỆU
Chương 5:CÂY (TREE)
2
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
3
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
4
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.
5
1.Khái niệm cây – Biểu diễn cây (tt)
1.2. Một số khái niệm cơ bản
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 lá
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)
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.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)
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.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
8
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
9
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;
10
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)
[...]... *TREE; TREE T; 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 (Tham khảo) Khởi tạo cây nhịn phân: cho... 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 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... trúc dữ liệu của cây nhị phân tìm kiếm là cấu trúc dữ liệu biểu diễn cây nhị phân nói chung struct TNode { int Info; struct TNode *pL,*pR; }; 25 2 Cây nhị phân (Binary Tree) 2.3 Cây nhị phân tìm kiếm (Binary Searching Tree) 2.3.2 Các thao tác trên cây nhị phân tìm kiếm 2.3.2.a Thêm vào một phần tử X vào cây 2.3.2.b Tạo một cây NPTK 2.3.2.c Duyệt cây 2.3.2.d Tìm một phần tử X trong cây 2.3.2.e Huỷ một... "; } } 23 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 Vd: A,B,C,D,E,F,G 24 2 Cây nhị phân (Binary Tree) 2.3 Cây nhị phân tìm kiếm (Binary Searching Tree) 2.3.1 Khái niệm – Cấu trúc dữ liệu Cây nhị phân tìm kiếm là cây nhị phân trong đó tại mỗi nút, khoá của nút đang xét lớn hơn khóa của tất cả các nút thuộc cây con trái và nhỏ hơn khoá của tất các nút thuộc cây con phải... 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 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ự trước – (Node-Left-Right): Duyệt nút gốc, duyệt cây con bên trái, duyệt cây con bên phải void NLR(TREE T) { if (T!=NULL) { coutpL); coutKey > SearchData) // tìm ở cây con bên trái CurrNode = CurrNode->BSTree->BSTLeft B4: ELSE // tìm ở cây con bên phải CurrNode = CurrNode->BSTree->BSTRight B5: Lặp lại B2 BKT: Kết thúc 35 2 Cây nhị phân (Binary... InsertTree(T,k); } } 29 2 Cây nhị phân (Binary Tree) 2.3.2.c Duyệt cây 2.3.2.d Tìm một phần tử X trong cây int SearchTree(TREE T,int k) { if (T==NULL) return 0; else if (T->Info==k) return 1; if (k>T->Info) return SearchTree(T->pR,k); else return SearchTree(T->pL,k); } 30 2 Cây nhị phân (Binary Tree) 2.3.2.c Duyệt cây 2.3.2.d Tìm một phần tử X trong cây TNode* SearchTree1(TREE T,int k) { if (T==NULL) return . 1
Môn: CẤU TRÚC DỮ LIỆU
Chương 5: CÂY (TREE)
2
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 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.