Mi' wuynh ơi, mấy hàm sau bị báo lỗi là "Function should return a value", có cách nào khắc phục lỗi này không,níu có thì chỉ đệ dzới (các hàm này chạy vẫn đúng), cảm ơn mí wuynh trước nhoa.
//Ham hieu chinh node cho AVL_Tree
AVLTREE_NODE *AdjustNode(AVLTREE_NODE *&pCurRoot)
{
AVLTREE_NODE *p;
if (HeightOfNode(pCurRoot->pLeft)==HeightOfNode(pCurRoot->pRight)+2)
{
p=pCurRoot->pLeft;
if (HeightOfNode(p->pLeft)==HeightOfNode(p->pRight))
{
pCurRoot->pLeft=p->pRight;
p->pRight=pCurRoot;
pCurRoot->nBal=-1;
p->nBal=1;
return p;
}
else if (HeightOfNode(p->pLeft)==HeightOfNode(p->pRight)+1)
{
pCurRoot->pLeft=p->pRight;
p->pRight=pCurRoot;
pCurRoot->nBal=0;
p->nBal=0;
return p;
}
else if (HeightOfNode(p->pLeft)==HeightOfNode(p->pRight)-1)
{
AVLTREE_NODE *p1;
p1=p->pRight;
p->pRight=p1->pLeft;
pCurRoot->pLeft=p1->pRight;
p1->pLeft=p;
p1->pRight=pCurRoot;
switch (p1->nBal)
{
case 0:
{
pCurRoot->nBal=0;
p->nBal=0;
}
break;
case 1:
{
pCurRoot->nBal=0;
p->nBal=-1;
}
break;
case -1:
{
pCurRoot->nBal=1;
p->nBal=0;
}
break;
}
p1->nBal=0;
return p1;
}
}
else
{
p=pCurRoot->pRight;
if (HeightOfNode(p->pRight)==HeightOfNode(p->pLeft))
{
pCurRoot->pRight=p->pLeft;
p->pLeft=pCurRoot;
pCurRoot->nBal=1;
p->nBal=-1;
return p;
}
else if (HeightOfNode(p->pRight)==HeightOfNode(p->pLeft)+1)
{
pCurRoot->pRight=p->pLeft;
p->pLeft=pCurRoot;
pCurRoot->nBal=0;
p->nBal=0;
return p;
}
else if (HeightOfNode(p->pRight)==HeightOfNode(p->pLeft)-1)
{
AVLTREE_NODE *p1;
p1=p->pLeft;
p->pLeft=p1->pRight;
pCurRoot->pRight=p1->pLeft;
p1->pRight=p;
p1->pLeft=pCurRoot;
switch (p1->nBal)
{
case 0:
{
pCurRoot->nBal=0;
p->nBal=0;
}
break;
case 1:
{
pCurRoot->nBal=-1;
p->nBal=0;
}
break;
case -1:
{
pCurRoot->nBal=0;
p->nBal=1;
}
break;
}
p1->nBal=0;
return p1;
}
}
}
//Ham them node cho AVL_Tree
int AVLTreeAdd(AVLTREE_NODE *&pCurRoot,int nKey)
{
if (pCurRoot==NULL)
{
pCurRoot=new(AVLTREE_NODE);
pCurRoot->pLeft=pCurRoot->pRight=NULL;
pCurRoot->nKey=nKey;
return 1;
}
else
{
if (pCurRoot->nKey==nKey) return 0;
if (pCurRoot->nKey>nKey)
AVLTreeAdd(pCurRoot->pLeft,nKey);
if (pCurRoot->nKey<nKey)
AVLTreeAdd(pCurRoot->pRight,nKey);
}
int nHL,nHR;
nHL=HeightOfNode(pCurRoot->pLeft);
nHR=HeightOfNode(pCurRoot->pRight);
if (nHL==nHR) pCurRoot->nBal=0;
else if (nHL==nHR+1) pCurRoot->nBal=-1;
else if (nHL==nHR-1) pCurRoot->nBal=1;
else pCurRoot=AdjustNode(pCurRoot);
}
//Ham tim node thay the cho node can xoa
AVLTREE_NODE *SearchStandFor(AVLTREE_NODE *pCurRoot,AVLTREE_NODE *&pStandFor)
{
if (pStandFor->pRight!=NULL)
SearchStandFor(pCurRoot,pStandFor->pRight);
else
{
pCurRoot->nKey=pStandFor->nKey;
AVLTREE_NODE *pTemp;
pTemp=pStandFor;
pStandFor=pStandFor->pLeft;
return pTemp;
}
}
//Ham xoa node co khoa la nKey trong AVL_Tree
int AVLTreeDelete(AVLTREE_NODE *&pCurRoot,int nKey)
{
if (pCurRoot==NULL) return 0;
if (pCurRoot->nKey>nKey)
AVLTreeDelete(pCurRoot->pLeft,nKey);
else if (pCurRoot->nKey<nKey)
AVLTreeDelete(pCurRoot->pRight,nKey);
else
{
AVLTREE_NODE *pTemp;
pTemp=pCurRoot;
if (pCurRoot->pLeft==NULL) pCurRoot=pCurRoot->pRight;
else if (pCurRoot->pRight==NULL) pCurRoot=pCurRoot->pLeft;
else pTemp=SearchStandFor(pCurRoot,pCurRoot->pLeft);
delete pTemp;
int nHL,nHR;
nHL=HeightOfNode(pCurRoot->pLeft);
nHR=HeightOfNode(pCurRoot->pRight);
if (nHL==nHR) pCurRoot->nBal=0;
else if (nHL==nHR+1) pCurRoot->nBal=-1;
else if (nHL==nHR-1) pCurRoot->nBal=1;
else pCurRoot=AdjustNode(pCurRoot);
return 1;
}
}
Bookmarks