Professional Documents
Culture Documents
CTDL Lab05 Cay - Can - Bang Avl PDF
CTDL Lab05 Cay - Can - Bang Avl PDF
CTDL Lab05 Cay - Can - Bang Avl PDF
MC TIU
Hon tt bi thc hnh ny, sinh vin c th:
- Hiu c cc thao tc quay cy (quay tri, quay phi) hiu chnh cy thnh cy cn
bng.
- Ci t hon chnh cy cn bng AVL.
Thi gian thc hnh: 120 pht 360 pht
Lu : Sinh vin phi thc hnh bi tp v Cy nh phn v Cy nh phn tm kim trc khi
lm bi ny.
TM TT
Cy cn bng AVL l cy nh phn tm kim (NPTK) m ti mi nh ca cy, cao ca cy con
tri v cy con phi khc nhau khng qu 1.
V d 1: cy cn bng AVL V d 2: cy khng cn bng
b. Quay phi
C bn
2
Trang
Phn tch
- Cc node trn cy cn bng cng ging nh cc node trn cy NPTK. Tuy nhin, do mi
ln thm node vo cy chng ta cn kim tra cao ca node va thm kim sot
tnh cn bng ca cy nn cn b sung thm gi tr cho bit s cn bng ti node vo
cu trc ca node. C th nh sau:
struct AVLNODE
{
int key;
int bal; // thuc tnh cho bit gi tr cn bng
// 0: cn bng, 1: lch tri, 2: lch phi
NODE* pLeft;
NODE* pRight;
};
struct AVLNODE
{
int Key;
int bal; // thuc tnh cho bit gi tr cn bng
// 0: cn bng, 1: lch tri, 2: lch phi
AVLNODE* pLeft;
AVLNODE* pRight;
};
}
Trang
P->bal = 0;
break;
case 2: //Ghi ch: cho bit y l trng hp mt cn bng no?
Ti liu hng dn thc hnh mn Cu trc d liu v gii thut
HCMUS 2010
LeftRotate(P);
P->bal = 0;
P->pLeft->bal = 0;
break;
}
}
int InsertNode(AVLNODE* &tree, int x)
{
int res;
if(tree==NULL){ //Ghi ch: cho bit ngha ca cu lnh ny
tree = CreateNode(x);
if(tree==NULL){
return -1; //thm ko thnh cng v thiu b nh
}
return 2;//thm thnh cng v lm tng chiu cao cy
}
else {
if(tree->Key==x){
return 0; //kha ny tn ti trong cy
}
else if(tree->Key > x){
res = InsertNode(tree->pLeft,x);
if(res < 2) {
return res;
}
switch(tree->bal){ //Ghi ch: gii thch ngha ca cu lnh
switch ny
case 0:
tree->bal = 1;
return 2;
case 1:
LeftBalance(tree);
return 1;
case 2:
tree->bal = 0;
return 1;
}
}
else{
res = InsertNode(tree->pRight,x);
if(res<2){
return res;
}
switch(tree->bal){
case 0:
tree->bal=2;
return 2;
case 1:
tree->bal = 0;
return 1;
case 2:
RightBalance(tree);
return 1;
}
}
}
}
void Traverse(AVLNODE* t)
{
if(t!=NULL)
5
{
Trang
Traverse(t->pLeft);
printf("Khoa: %d, can bang: %d\n", t->Key,t->bal);
Traverse(t->pRight);
Ti liu hng dn thc hnh mn Cu trc d liu v gii thut
HCMUS 2010
}
}
void RemoveAll(AVLNODE* &t)
{
if(t!=NULL){
RemoveAll(t->pLeft);
RemoveAll(t->pRight);
delete t;
}
}
Traverse(tree);
RemoveAll(tree);
return 0;
}
Yu cu
1. Bin dch on chng trnh nu trn.
2. Cho bit kt qu in ra mn hnh khi ngi dng nhp vo cc d liu sau:
-1
10 30 35 32 20 8 -1
30 40 50 -10 -5 -1
3. Nhn xt trnh t cc node c xut ra mn hnh? Gii thch ti sao li in ra c trnh t nh
nhn xt?
4. Sinh vin hon tt hm RightRotate trong source code.
Gi : RightRotate tng t hm LeftRotate.
5. Bin dch li chng trnh sau khi hon thnh cu 3 v cho bit kt qu in ra mn hnh khi ngi
dng nhp vo cc d liu sau:
50 20 30 10 -5 7 15 35 57 65 55 -1
6. V hnh cy AVL c to ra t phn nhp liu cu 5.
7. Hy ghi ch cc thng tin bng cch tr li cc cu hi ng vi cc dng lnh c yu cu ghi ch
(//Ghi ch) trong cc hm InsertNode, BalanceLeft, BalanceRight, _tmain.
6
Trang
BI TP THM
1. Vit chng trnh cho php to, tra cu v sa cha t in Anh-Vit (sinh vin lin h vi
GVLT chp file t in Anh-Vit)
2. Ci t li cc bi tp thm ca cy NPTK bng cch dng cy AVL
7
Trang