Báo Cáo CÂY NHỊ PHÂN TÌM KIẾM CÂY AVL

42 2.3K 3
Báo Cáo CÂY NHỊ PHÂN TÌM KIẾM CÂY AVL

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Ngày đăng: 04/04/2015, 15:12

Từ khóa liên quan

Mục lục

  • Đề Tài Báo Cáo:

  • Phần 1:

  • Định nghĩa

  • Ví dụ CNP:

  • Khai báo CNP:

  • Slide 7

  • Phép duyệt cây

  • 1.NLR(Tiền thứ tự)

  • Phép duyệt cây_ NLR:

  • 2. NLR(Trung thứ tự)

  • Phép duyệt cây_LNR

  • Slide 13

  • Ví dụ về phép duyệt cây LRN

  • Tìm kiếm trên CNP:

  • Giải thuật tìm kiếm trên BST

  • Ví dụ tìm kiếm trên CNP

  • Slide 18

  • Giải thuật thêm vào CNP:

  • Giải thuật thêm vào CNP

Tài liệu cùng người dùng

Tài liệu liên quan