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;