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

BÀI BÁO CÁO DEMO CÂY.PPT

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 (337.79 KB, 38 trang )


BÀI BÁO CÁO
DEMO CÂY
Nhóm thực hiện:
Trần Thị Hồng Nhung
Huỳnh Thị Thúy Nhi
Trần Ngọc Thiên Phương
Nguyễn Thanh Trúc

Quay đ n Left-Leftơ
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;
}

33


15
13
10
18
36
18
Ví d :Quay đ n Left-Leftụ ơ


Quay đ n Right-Rightơ
void rotateRR(AVLTree &T)
{
AVLNode* T1=T->pRight;
T->pRight=T1->pLeft;
T1->pLeft=T;

switch(T1->bal)
{
case RH:
T->bal=EH;
T1->bal=EH;
break;
case EH:
T->bal=RH;
T1->bal=LH;
break;
}
T=T1;
}


Ví d : Quay đ n Right-Rightụ ơ
40
33
36
35
15
42




Cây sau khi cân b ngằ
33
36
15
35
42
40

Quay kép Left-Right
void rotateLR(AVLTree &T)
{
AVLNode* T1=T->pLeft;
AVLNode* T2=T->pRight;
T->pLeft=T2->pRight;
T2->pRight=T;
T1->pRight=T2->pLeft;
T2->pLeft=T1;

switch(T2->bal)

{
case LH:
T->bal=RH;
T1->bal=EH;
break;
case EH:
T->bal=EH;
T1->bal=EH;
break;
case RH:
T->bal=EH;
T1->bal=LH;
break;
}
T2->bal=EH;
T=T2;
}

Ví d :Quay kép Left-Rightụ
33
3615
1813
20
16

Cây sau khi cân b ngằ
18
3315
13
16

20
36

Quay kép Right-Left
void rotateRL(AVLTree &T)
{
AVLNode* T1=T->pRight;
AVLNode* T2=T1->pLeft;
T->pRight=T2->pLeft;
T2->pLeft=T;
T1->pLeft=T2->pRight;
T2->pRight=T1;

switch(T2->bal)
{
case RH:
T->bal=LH;
T1->bal=EH;
break;
case EH:
T->bal=EH;
T1->bal=EH;
break;
case LH:
T->bal=EH;
T1->bal=RH;
break;
}
T2->bal=EH;
T=T2;

}

Ví d : Quay kép Right-Leftụ
39
33
38
36
15
35 37

Cây sau khi cân b ngằ
33
36
38
35
37
39
15

Cân b ng khi cây b l ch v bên tráiằ ị ệ ề
int balanceLeft(AVLTree &T){
AVLNode* T1=T->pLeft;
switch(T1->bal){
case LH:
rotateLL(T);
return 2;
case EH:
rotateLL(T);
return 1;
case RH:

rotateLR(T);
return 2;
}
return 0;
}

Cân b ng khi cây l ch v bên ph iằ ệ ề ả
int balanceRight(AVLTree &T){
AVLNode* T1=T->pRight;
switch(T1->bal){
case LH:
rotateRL(T);
return 2;
case EH:
rotateRR(T);
return 1;
case RH:
rotateRR(T);
return 2;
}
return 0;
}

Thêm 1 ph n t vào câyầ ử
int insertNode(AVLTree &T,int x)
{
int t;
if(T)
{
if(T->Info==x) return 0; //da co nut co gia tri x

if(T->Info > x)
{
t=insertNode(T->pLeft,x);
if(t<2) return t;

switch(T->bal)
{
case RH:
T->bal=EH;
return 1;
case EH:
T->bal=LH;
return 2;
case LH:
balanceLeft(T);
return 1;
}
}
else

{
t=insertNode(T->pRight,x);
if(t<2) return t;
switch(T->bal)
{
case LH:
T->bal=EH;
return 1;
case EH:
T->bal=RH;

return 2;
case RH:
balanceRight(T);
return 1;
}
}
}

T=new AVLNode;
if(T==NULL) return -1; //thieu bo nho
T->Info=x;
T->bal=EH;
T->pLeft=T->pRight=NULL;
return 2;
}

Cây sau khi thêm
15
10
14
18
12
8 11

Cây sau khi cân b ngằ
12
10
8
15
14

18
11

Xóa 1 ph n t trên câyầ ử
int DelNode(AVLTree &T,int x)
{
int t;
if(T==NULL) return 0;
if(T->Info > x)
{
t=DelNode(T->pLeft,x);
if(t<2) return t;

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×