1. Trang chủ
  2. » Công Nghệ Thông Tin

[11]Avl.pdf

6 2 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cây AVL (Cây Cân Bằng)
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Cấu Trúc Dữ Liệu Và Giải Thuật
Thể loại Báo cáo thực tập hoặc luận văn
Năm xuất bản 2018
Thành phố Hà Nội
Định dạng
Số trang 6
Dung lượng 1,26 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>

Trang 1

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

Data Structures & Algorithms

CÂY CÂN BẰNG – AVL

2

ĐẶT VẤN ĐỀ

 Vẽ cây nhị phân tìm kiếm lập được từ dãy sau theo chiều từ trái sang phải: 1, 3, 5, 6, 7, 9

3

Khái niệm cây AVL

 Cây cân bằng AVL là cây nhị phân tìm kiếm mà tại

mỗi đỉnh của cây , độ cao của cây con trái và cây con

phải chênh lệch không quá 1

 Do G.M A delsen V elskii và E.M L endis đưa ra vào năm

1962, đặt tên là AVL

4

Cây AVL – Ví dụ

CÂY AVL ?

Cấu trúc cây AVL

 Cây cân bằng AVL là cây nhị phân tìm kiếm được bổ

sung một giá trị cho biết sự cân bằng của cây

struct node

{

struct node *pLeft;

struct node *pRight;

int bal;

};

Trong đó bal là chỉ số cân bằng

Cấu trúc cây AVL

cao cây con phải và cây con trái của nó

 Đối với cây AVL: chỉ số cân bằng của mỗi nút chỉ có

thể mang một trong ba giá trị sau

 CSCB(p) =0 Nếu Độ cao của cây phải = độ cao cây trái (EH)

 CSCB(p) =1 Nếu Độ cao của cây phải > độ cao cây trái (RH)

 CSCB(p) =-1 Nếu Độ cao của cây phải < độ cao cây trái (LH)

#define EH 0

#define RH 1 #define LH -1

Trang 2

7

Các thao tác trên AVL

 Giống như cây NPTK, tuy nhiên sau khi thêm phải cân

bằng lại cây

Hủy một phần tử trên cây AVL

 Giống như cây NPTK, tuy nhiên sau khi hủy phải cân

bằng lại cây

 Cân bằng lại một cây vừa bị mất cân bằng (Rotation)

8

Các trường trường hợp mất cân bằng

Left - Left

Right- Right

9

Các trường trường hợp mất cân bằng

Left- Right

Right- Left

10

Các trường trường hợp mất cân bằng

con trái hơn 1 )

Các trường trường hợp mất cân bằng

T

T1

L

R1 L1

T

T1

L

R1 T2

R21 L21

Các trường hợp mất cân bằng

 Mất cân bằng phải- phải (R-R)

Trang 3

13

Các trường hợp mất cân bằng

 Mất cân bằng phải- trái(R-L)

14

Các trường trường hợp mất cân bằng

trái hơn 1 )

15

Các trường trường hợp mất cân bằng

T

R T1

R1

L1

T

R T1

T2 L1

R21 L21

16

Các trường hợp mất cân bằng

 Mất cân bằng trái trái (L-L)

Các trường hợp mất cân bằng

 Mất cân bằng trái- phải (L-R)

Xử lý các trường hợp mất cân bằng

 Mất cân bằng LL ở P  Quay phải

b

T2

a

T1 T3

P

Q

Trang 4

19

Xử lý các trường hợp mất cân bằng

 Mất cân bằng LL ở P  Quay phải

20

Xử lý các trường hợp mất cân bằng

12

9

5

20

9

7

5

12

20

10

21

Xử lý các trường hợp mất cân bằng

 Mất cân bằng LL ở T  Quay phải

22

Xử lý các trường hợp mất cân bằng

void rotateLL ( AVLTree &T)

{ AVLNode * T1 = T-> pLeft ; T->pLeft = T1->pRight ; T1-> pRight = T;

switch( T1-> balFactor ) {

case LH: T-> balFactor = EH;

T1-> balFactor = EH;

break ; case EH: T-> balFactor = LH;

T1-> balFactor = RH;

break ; }

T = T1;

}

Xử lý các trường hợp mất cân bằng

Xử lý các trường hợp mất cân bằng

Trang 5

25

Xử lý các trường hợp mất cân bằng

void rotateRR(AVLTree &T)

{

AVLNode * T1 = T-> pRight ;

T->pRight = T1-> pLeft ;

T1-> pLeft = T;

switch ( T1-> balFactor )

{

case RH: T-> balFactor = EH;

T1-> balFactor = EH;

break ;

case EH: T-> balFactor = RH;

T1-> balFactor = LH;

break ;

}

T = T1;

Xử lý các trường hợp mất cân bằng

b

T1

a

T3

Q

P

T2

h-1

h

h

b

T1

T4

a

C

T3 T2

Bước 1: Quay trái Q

P

Q

h

27

Xử lý các trường hợp mất cân bằng

Bước 2: Quay phải cây P

C

b

T1 T4

a

T3

b

T1

T4

a

C

T3

T2

P

Q

T2

28

Xử lý các trường hợp mất cân bằng

 Mất cân bằng LR

Xử lý các trường hợp mất cân bằng

55

19

4

69

23

20

55

69

23

19

Xử lý các trường hợp mất cân bằng

55

69

23

19

23

19

55

69

Trang 6

31

Xử lý các trường hợp mất cân bằng

 Mất cân bằng LR ở T  Quay Trái T1 Phải T

32

Xử lý các trường hợp mất cân bằng

 Mất cân bằng LR ở T  Quay Phải Trái

void rotateLR(AVLTree &T)

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

T1-> pRight = T2-> pLeft ; T2-> pLeft = T1;

switch (T2-> balFactor ) {

case LH: T-> balFactor = RH;

T1-> balFactor = EH;

break ; case EH: T-> balFactor = EH;

T1-> balFactor = EH;

break ; case RH: T-> balFactor = EH;

T1-> balFactor = LH;

break ; } T2-> balFactor = EH;

T = T2;

}

33

• Slide được tham khảo từ:

• Slide CTDL GT, Khoa Khoa Học Máy Tính, ĐHCNTT

• Congdongcviet.com

• Cplusplus.com

Slide được tham khảo từ

34

Ngày đăng: 25/02/2023, 15:26

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

TÀI LIỆU LIÊN QUAN