Tải bản đầy đủ (.ppt) (15 trang)

CÂY NHỊ PHÂN TÌM KIẾM CÂN BẰNG pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (281.02 KB, 15 trang )

Cấu trúc dữ liệu và thuật giải
NỘI DUNG
CÂY NHỊ PHÂN TÌM KIẾM CÂN BẰNG
Cấu trúc dữ liệu và thuật giải
Ðịnh nghĩa

Cây nhị phân tìm kiếm cân bằng là cây mà tại mỗi nút
của nó độ cao của cây con trái và của cây con phải chênh
lệch không quá một
Ví dụ:
44
23
88
13 37
59
108
15 30 40 55 71
Cấu trúc dữ liệu và thuật giải
Tổ chức dữ liệu

Chỉ số cân bằng = độ lệch giữa cây trái và cây phải của
một nút

Các giá trị hợp lệ :

CSCB(p) = 0 ⇔ Độ cao cây trái (p) = Độ cao cây
phải (p)

CSCB(p) = 1 ⇔ Độ cao cây trái (p) < Độ cao cây
phải (p)


CSCB(p) = -1 ⇔ Độ cao cây trái (p) > Độ cao
cây phải (p)
Cấu trúc dữ liệu và thuật giải
Tổ chức dữ liệu(tt)
typedef struct tagAVLNode {
char balFactor; //ch s cân b ngỉ ố ằ
Data key;
struct tagAVLNode* pLeft;
struct tagAVLNode* pRight;
}AVLNode;
typedef AVLNode *AVLTree;
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do
lệch trái
T
T1
L1
R1
h
h-1
h-1
L
R1
T
T1
L1
h
h-1
L
R R

h-1
T
T1
L1
h
h-1
h
L
R
L1
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do
lệch phải
T
h-1
R1
T1
h
h
R
L
L1
T
T1
L1
R1
h
h-1
R
T

R1
T1
L1
h
h-1
R
L
h-1
L
h-1
Cấu trúc dữ liệu và thuật giải
Các thao tác trên cây cân bằng

Khi thêm hay xoá 1 nút trên cây, cĩ thể làm cho cây mất
tính cân bằng, khi ấy ta phải tiến hành cân bằng lại.

Cây có kh n ng m t cân b ng khi thay i chi u cao:ả ă ấ ằ đổ ề

Lệch nhánh trái, thêm bên trái

Lệch nhánh phải, thêm bên phải

Lệch nhánh trái, hủy bên phải

Lệch nhánh phải, hủy bên trái

Cân b ng l i cây : tìm cách b trí l i cây sao cho chi u ằ ạ ố ạ ề
cao 2 cây con cân i:đố

Kéo nhánh cao bù cho nhánh thấp


Phải bảo đảm cây vẫn là Nhị phân tìm kiếm
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch trái
1 .1 Cây T l ch trái, cây trái T1 c a T c ng l ch tráiệ ủ ũ ệ
T
T1
L1
R1
h
h-1
h-1
L
R
T1
T
L1
R1
h
h-1
R
h-1
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch trái
1 . 2 Cây T l ch trái, cây trái T1 c a T không l chệ ủ ệ
T
T1
L1
h-1
h

L
R
T1
T
L1
h
R
h-1
R1 R1
h
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch trái
1 . 3 Cây T l ch trái, cây trái T1 c a T l ch ph iệ ủ ệ ả
h
T
T1
L1
h-1
R1
R
h-1
T2
L2 R2
TT1
L1
h-1
R
h-1
T2
L2 R2

Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch phải
1 .1 Cây T l ch ph i, cây ph i T1 c a T c ng l ch ph iệ ả ả ủ ũ ệ ả
T
T1
L1R1
h
h-1
h-1
L
R
T1
T
L1
R1
h
h-1
R
h-1
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do lệch phải
1 . 2 Cây T l ch ph i, cây ph i T1 c a T không l chệ ả ả ủ ệ
T
T1
L1
h
h-1
h
L
R

R1
T1
T
L1
h
R
h-1
R1
h
Cấu trúc dữ liệu và thuật giải
Các trường hợp mất cân bằng do
lệch phải
1 . 3 Cây T l ch ph i, cây ph i T1 c a T l ch trái ệ ả ả ủ ệ
h
T
T1
L1
h-1
R1
R
h-1
T2
L2R2
T T1
L1
h-1
R
h-1
T2
L2R2

Cấu trúc dữ liệu và thuật giải
Thêm 1 nút

Thêm bình thường như trường hợp cây NPTK

Nếu cây tăng trưởng chiều cao:

Lần ngược về gốc để phát hiện nút bị mất cân bằng

Tiến hành cân bằng lại nút đó bằng thao tác cân bằng
thích hợp

Việc cân bằng lại chỉ cần thực hiện 1 lần tại nơi mất cân
bằng
Cấu trúc dữ liệu và thuật giải
Hủy 1 nút

H y bình th ng nh tr ng h p cây NPTKủ ườ ư ườ ợ

N u cây gi m chi u cao:ế ả ề

Lần ngược về gốc để phát hiện nút bị mất cân bằng

Tiến hành cân bằng lại nút đó bằng thao tác cân
bằng thích hợp

Tiếp tục lần ngược lên nút cha…

Vi c cân b ng l i co th lan truy n lên t n g cệ ằ ạ ể ề ậ ố

×