Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 48 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
48
Dung lượng
1,21 MB
Nội dung
CHƯƠNG KIỂU CẤU TRÚC CÂY GV Th.S Thiều Quang Trung Trường Cao đẳng Kinh tế Đối ngoại Nội dung • Khái niệm cấu trúc - tree • Đặc điểm cấu trúc • Định nghĩa kiểu cấu trúc • Các thao tác cấu trúc GV Thiều Quang Trung Khái niệm cấu trúc • Cây tập hợp T phần tử (gọi nút cây), gồm có: – nút đặc biệt gọi nút gốc, – nút lại chia thành tập rời T1, T2, …,Tn theo quan hệ phân cấp, Ti • Mỗi nút cấp i quản lý số nút cấp i+1 Quan hệ gọi quan hệ cha –con GV Thiều Quang Trung Khái niệm cấu trúc • Bậc nút: số nút • Nút gốc: nút khơng có nút cha • Nút lá: nút có bậc • Nút nhánh: nút có bậc khác gốc 2 GV Thiều Quang Trung 1 0 Khái niệm cấu trúc Mức Mức Mức Mức x • Chiều dài đường đến nút x: số nhánh cần qua kể từ gốc đến x • Độ cao cây: Độ sâu (mức) nút thấp GV Thiều Quang Trung Đặc điểm nhị phân tìm kiếm 36 15 23 • Là nhị phân • Giá trị node lớn giá trị tất node bên trái nhỏ giá trị tất node bên 40 phải ➔Nút có giá trị nhỏ nằm trái ➔Nút có giá trị lớn nằm phải GV Thiều Quang Trung Định nghĩa kiểu liệu Giá trị Key TNODE Nút Trỏ trái pLeft Trỏ phải pRight typedef struct TNODE { Key; struct TNODE *pLeft, *pRight; } *TREE; GV Thiều Quang Trung Ví dụ khai báo typedef struct TNODE { int Key; struct TNODE *pLeft, *pRight; } *TREE; GV Thiều Quang Trung Các lưu ý cài đặt • Bước 1: Khai báo kiểu liệu biểu diễn • Bước 2: Xây dựng hàm đưa liệu (nhập) vào • Bước 3: Xây dựng thao tác duyệt, tìm kiếm, huỷ, … GV Thiều Quang Trung Các thao tác Tạo Duyệt Cho biết thơng tin Tìm kiếm Xoá node GV Thiều Quang Trung 10 Bài tập • Cho dãy số theo thứ tự nhập từ trái sang phải: 20, 15, 35, 30, 11, 13, 17, 36, 47, 16, 38, 28, 14 – Vẽ nhị phân tìm kiếm cho dãy số – Cho biết kết duyệt theo thứ tự trước, sau – Cho biết độ cao cây, nút lá, nút có bậc – Vẽ lại sau thêm nút: 25 91 – Trình bày bước vẽ lại sau xoá nút: 11 35 GV Thiều Quang Trung 3434 Viết hàm In node có giá trị chẵn In node có giá trị lớn x Độ cao Số node Tìm min, max Tìm node có giá trị x GV Thiều Quang Trung 3535 Viết hàm Số node (node bậc 0) Số node có (node bậc 1) Số node có phải 10 Số node có trái 11 Số node (node bậc 2) 12 Các node mức 13 Độ dài đường từ gốc đến node x GV Thiều Quang Trung 3636 GV: Thiều Quang Trung 37 Viết hàm C/C++ thao tác • • • • • • • • • • Thêm nút Tìm nhánh thay Hủy nút Tìm nút x Đếm số nút Đếm nút có nhánh Đếm nút có nhánh Tìm chiều cao Duyệt theo thứ tự giảm dần RNL In cấu trúc GV Thiều Quang Trung 38 Thêm nút x vào int themnode(tree &t,int x) { if(t!=NULL) { if(t->key==x) return 0; if(t->key>x) return themnode(t->pleft,x); else return themnode(t->pright,x); } t=new node; if(t==NULL) return -1; t->key=x; t->pleft=t->pright=NULL; return 1; } GV Thiều Quang Trung 39 Tìm nhánh thay void thaythe(tree &p,tree &t) { if(t->pleft) thaythe(p,t->pleft); else { p->key=t->key; p=t; t=t->pright; } } GV Thiều Quang Trung 40 Xóa nút x khỏi void huynode(tree &t,int x) { if(t) { if(t->keypright,x); else { if(t->key>x) huynode(t->pleft,x); else { node *p; p=t; if(t->pleft==NULL) t=t->pright; else { if(t->pright==NULL) t=t->pleft; else thaythe(p,t->pright);} delete p; } } } else cout key) { cout key) find(t->pleft,x); else find(t->pright,x); } else { cout pleft == NULL)&&(t->pright==NULL)) return 1; return sonutLa(t->pleft)+sonutLa(t->pright); } GV Thiều Quang Trung 43 Đếm chiều cao int height(tree t) { if (t==NULL) return(0); else return (1+ max(height(t->pleft),height(t->pright))); } GV Thiều Quang Trung 44 Đếm số nút có nhánh int sonut1con(tree t) { if (t==NULL) return 0; if ((t->pleft == NULL)&&(t->pright==NULL)) return 0; if (t->pleft == NULL) return + sonut1con(t->pright); if (t->pright == NULL) return + sonut1con(t->pleft); else return sonut1con(t->pleft)+sonut1con(t->pright); } GV Thiều Quang Trung 45 Đếm số nút có nhánh int sonut2con(tree t) { if (t==NULL) return 0; if ((t->pleft == NULL)&&(t->pright==NULL)) return 0; if (t->pleft == NULL) return sonut2con(t->pright); if (t->pright == NULL) return + sonut2con(t->pleft); else return + sonut2con(t->pleft)+sonut2con(t->pright); } GV Thiều Quang Trung 46 Duyệt theo thứ tự giảm dần void RNL(tree t) { if(t) { RNL(t->pright); cout key pleft); } } GV Thiều Quang Trung 47 In cấu trúc void printtree(tree t,int dichphai) { int i; tree temp=t; if (temp!=NULL) { printtree(temp->pright,dichphai+4); for (i=1;i