Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
1,19 MB
Nội dung
A B C D F G E H K Đề Tài Báo Cáo: Đề Tài Báo Cáo: CÂY NHỊ PHÂN TÌM KIẾM CÂY AVL Các thành viên trong nhóm: 1. ĐẶNG HỒNG HẠNH 2. HOÀNG NGỌC PHƯƠNG DUNG 3. LÊ TRẦN PHƯƠNG VI Ngôn ngữ sử dụng: C++ Môi trường làm việc: BORLANDC Tài liệu tham khảo: 1. Nhập môn cấu trúc dữ liệu và thuật toán (GS.TS.Hoàng Kiếm) 2. C++ & Lập trình hướng đối tượng (GS.Phạm Văn Ất) 3. Cấu trúc dữ liệu và thuật giải (Th.Sĩ Nguyễn Mạnh Cường) - Nhiệm vụ từng thành viên: Viết Code: Phương Dung + Hồng Hạnh Soạn Powerpoint: Phương Dung+Hồng Hạnh+Phương Vi A B C D F G E H K Phần 1: Phần 1: CÂY NHỊ PHÂN TÌM KIẾM Định nghĩa Cây nhị phân tìm kiếm Cây nhị phân: là cây mà tại mỗi nút có tối đa 2 con Có một node gọi là gốc (root) và 2 cây con gọi là cây con trái và cây con phải Giá trị của những nút bên trái nhỏ hơn giá trị của những nút bên phải. Ví dụ: Cây rỗng: Cây có 1 node: là node gốc Cây có 2 node: Ví dụ CNP: 25 10 3 1 6 5 18 12 20 13 37 29 35 32 50 41 Khai báo CNP: typedef struct TagNode { int info; struct TagNode *pL,*pR; int x,y; }tNode,Node,*pNode; typedef tNode *tree; Các thao tác: Nhập xuất cây. Thêm phần tử X trong cây. Tìm phần tử X trong cây. Hủy phần tử X trong cây. Đếm số nút của cây. Đếm số lá của cây. Đếm số nút có 1 con. Đếm số nút có 2 con. Chiều cao của cây. Hủy toàn bộ cây NPTK. Phép duyệt cây Duyệt qua từng node của cây (mỗi node 1 lần) • Cách duyệt: 1.NLR (Tiền thứ tự) 2.LNR(Trung thứ tự) 3.LRN(hậu thứ tự) 1.NLR(Tiền thứ tự) void NLR(TREE T) { if(T!=NULL) { cout<<T->Info<<" ";//thamnut T NLR(T->pLeft); NLR(T->pRight); } } Phép duyệt cây_ NLR: 20 8 3 1 5 4 15 9 16 12 26 21 25 22 29 28 20Kết quả: 8 3 1 5 4 15 9 12 16 26 21 25 22 29 28 [...]... typedef AVLNode* AVLTree; AVLNode* T; Các thao tác: Nhập xuất cây Thêm phần tử X trong cây Tìm phần tử X trong cây Hủy phần tử X trong cây Hủy toàn bộ cây AVL Lưu ý: mỗi thao tác thêm hay xóa,nếu cây bị mất cân bằng,ta phải cân bằng lại cây Ví dụ cây AVL Cây AVL Không phải cây AVL Thêm 1 phần tử trên cây AVL Int insertNode(AVLTree & T, int x) { return -1; // khi khong du bo nho return 0;//khi... D E G CÂY AVL K H Cây cân bằng chiều cao - AVL ĐN cây AVL: Là cây NPTK Tại node bất kỳ, chiều cao nhánh trái và nhánh phải chênh nhau không quá 1 Ký hiệu cho mỗi node của cây AVL: Node cân bằng: ‘-’ (bal=0) Nhánh trái cao hơn: ‘/’ (bal= -1) Nhánh phải cao hơn: ‘\’ (bal= 1) Khai báo cây AVL struct AVLNode { int bal; int Info; AVLNode* pLeft,* pRight; }; typedef AVLNode* AVLTree; AVLNode*... hơn khóa của T) 3.1 Tìm bên nhánh trái của T 4 else 4.1 Tìm bên nhánh phải của T End searchNode Ví dụ tìm kiếm trên CNP 25 10 37 3 18 1 6 5 12 29 20 13 50 35 41 32 Node gốc nhỏ hơn Giốngnhau lớn Khác nhau hơn Tìm kiếm 13 Tìm thấy Số node duyệt: 5 Số lần so sánh: 9 Ví dụ tìm kiếm trên CNP 25 10 37 3 18 1 6 5 12 29 20 13 50 35 41 32 Khác gốc nhỏ hơn Node nhau lớn hơn Tìm kiếm 14 Không tìm thấy Số node duyệt:... phải và làm bên phải cao lên \ Chiều cao cây tăng / Thêm vào bên phải và làm bên phải cao lên – Chiều cao cây không đổi \ Thêm vào bên phải và làm bên phải cao lên \\ Mất cân bằng bên phải Cân bằng cây AVL – Quay đơn Ví dụ thêm vào cây AVL \\ m – k \ – p (1) t \ u – v Ví dụ 2 thêm vào cây AVL (tt.) \\ m – k (2) – p \ t \ u – v Viết gọn void rotateLL(AVLTree &T) { AVLNode* T1=T->pLeft; T->pLeft=T1->pRight;... nếu đúng thì tìm thấy Tìm bên nhánh trái (hay phải) nếu khóa cần tìm nhỏ hơn (hay lớn hơn) khóa của node gốc tNode *SearchNode(tree T,int X) { if(T) { if(T->info==X) return T; if(T->info>X) return SearchNode(T->pL,X); else return SearchNode(T->pR,X); } return NULL; } Giải thuật tìm kiếm trên BST Algorithm searchNode Input: T là node gốc và X là khóa cần tìm Output: node tìm thấy 1 if (cây rỗng) 1.1... LNR(T->pRight); } } Phép duyệt cây_ LNR 15 6 21 3 10 1 5 4 7 16 13 8 25 19 22 18 Kết quả: 1 3 4 5 6 7 8 10 13 15 16 18 19 21 22 25 3.LRN (Hau thu tu) void LRN(TREE T) { if(T!=NULL) { LRN(T->pLeft); LRN(T->pRight); cout . 1: CÂY NHỊ PHÂN TÌM KIẾM Định nghĩa Cây nhị phân tìm kiếm Cây nhị phân: là cây mà tại mỗi nút có tối đa 2 con Có một node gọi là gốc (root) và 2 cây con gọi là cây con trái và cây. A B C D F G E H K Đề Tài Báo Cáo: Đề Tài Báo Cáo: CÂY NHỊ PHÂN TÌM KIẾM CÂY AVL Các thành viên trong nhóm: 1. ĐẶNG HỒNG HẠNH 2. HOÀNG NGỌC PHƯƠNG. *tree; Các thao tác: Nhập xuất cây. Thêm phần tử X trong cây. Tìm phần tử X trong cây. Hủy phần tử X trong cây. Đếm số nút của cây. Đếm số lá của cây. Đếm số nút có 1 con. Đếm