1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

42 2,3K 3

Đ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

Thông tin cơ bản

Định dạng
Số trang 42
Dung lượng 1,19 MB

Nội dung

Định nghĩa 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

Trang 2

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

Trang 4

Định nghĩa

 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.

 Cây rỗng:

 Cây có 1 node: là node gốc

 Cây có 2 node:

Trang 5

Ví dụ CNP:

2510

3532

5041

Trang 6

Khai báo CNP:

typedef struct TagNode

{int info;

Trang 7

Chiều cao của cây

Hủy toàn bộ cây NPTK.

Trang 9

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

void NLR(TREE T)

{

if(T!=NULL) {

cout<<T->Info<<" ";//thamnut T NLR(T->pLeft);

NLR(T->pRight);

} }

Trang 10

Phép duyệt cây_ NLR:

208

2522

2928

20 Kết quả: 8 3 1 5 4 15 9 12 16 26 21 25 22 29 28

Trang 11

2 NLR(Trung thứ tự)

void LNR(TREE T)

{ if(T!=NULL)

Trang 12

Phép duyệt cây_LNR

156

1918

2522

1 Kết quả: 3 4 5 6 7 8 10 13 15 16 18 19 21 22 25

Trang 13

3.LRN (Hau thu tu)

void LRN(TREE T)

{if(T!=NULL)

Trang 14

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

158

1816

2926

1 Kết quả: 4 5 3 11 9 13 12 8 16 18 19 26 29 25 15

Trang 15

Tìm kiếm trên CNP:

 Chọn hướng tìm theo tính chất của CNP:

hơn (hay lớn hơn) khóa của node gốc

tNode *SearchNode(tree T,int X) {

if(T) {

}

Trang 16

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 return -1 //khong tim thay

2 if (X trùng khóa với T)

2.1 return 1 // tim thay

3 if (X có khóa nhỏ 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

Trang 17

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

2510

3532

5041

Tìm kiếm 13

Khác nhauGiống nhauNode gốc nhỏ hơnNode gốc lớn hơn

Tìm thấy Số node duyệt: 5Số lần so sánh: 9

Trang 18

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

2510

3532

5041

Tìm kiếm 14

Khác nhauNode gốc nhỏ hơnNode gốc lớn hơn

Không tìm thấy Số node duyệt: 5Số lần so sánh: 10

Trang 19

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

NHẬP: node gốc và dữ liệu cần thêm vào

XUẤT: CNP sau khi thêm vào

1 if (cây rỗng)

1.1 Thêm vào tại vị trí này

2 if (dl trùng khóa với nút gốc)

2.1 return 0

3 if (dl có khóa nhỏ hơn khóa của nút gốc)

3.1 Thêm vào bên nhánh trái của nút gốc

4 else

4.1 Thêm vào bên nhánh phải của nút gốcEnd

Trang 20

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

int InsertNode(tree &T,int gt)

{ y+=1;

} else {

T = GetNode(gt);

return 1;

}

Trang 21

Thêm vào CNP:

Trang 22

I/ Xóa nút p không là gốc:

1/ p không có con trái hoặc phải:

1 Gán liên kết từ cha của p xuống con duy nhất của p

Trang 23

2/ p có con trái và con phải

1 Tìm w là node trước node x trên phép duyệt cây trung thứ

tự (chính là node cực phải của cây con bên trái của x)

2 Thay x bằng w

3 Xóa node w cũ (giống trường hợp 1 hoặc 2 đã xét)

Trang 25

2/ T không có con trái hoặc con phải(xóa tương

tự như trường hợp I/.1)

3/ T có con trái và con phải(xóa tương tự

trường hợp I/.2)

Trang 27

Cây cân bằng chiều cao - AVL

 ĐN cây AVL:

chênh nhau không quá 1.

 Ký hiệu cho mỗi node của cây AVL:

Trang 28

Khai báo cây AVL

Trang 29

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.

Trang 30

Ví dụ cây AVL

Cây AVL

Không phải cây AVL

Trang 31

Thêm 1 phần tử trên cây AVL

Int insertNode(AVLTree & T, int x)

Trang 32

Các trạng thái khi thêm vào

\

/

Thêm vào bên phải và

làm bên phải cao lên

Thêm vào bên phải và làm bên phải cao lên

\

Thêm vào bên phải và làm bên phải cao lên

\\

Trang 33

Cân bằng cây AVL – Quay đơn

Trang 34

Ví dụ thêm vào cây AVL

(1)

\\

\ –

Trang 35

Ví dụ 2 thêm vào cây AVL (tt.)

\\

\ –

Trang 36

void rotateLL(AVLTree &T)

{AVLNode* T1=T->pLeft;

T->pLeft=T1->pRight;

T1->pRight=T;

switch(T1->bal)

{case LH:

T->bal=EH;T1->bal=EH;break;case EH:

T->bal=LH;T1->bal=RH;break;}

T=T1;

Trang 37

//Quay kep Left-Right void rotateLR(AVLTree &T) { AVLNode* T1=T->pLeft;

AVLNode* T2=T->pRight; T->pLeft=T2->pRight;

T->bal=EH; T1->bal=EH; break; case RH:

T->bal=EH; T1->bal=LH; break; }

T2->bal=EH;

T=T2;}

Trang 38

Xóa:Các trạng thái khi xóa node

Trang 39

Các trạng thái khi xóa node (tt.)

Trang 40

Các trạng thái khi xóa node (tt.)

Trang 41

Ví dụ xóa node của cây AVL

Trang 42

Ví dụ xóa node của cây AVL (tt.)

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w