PDA

نسخه کامل مشاهده نسخه کامل : حذف گره از درخت جستجوي دودويي



sayide
09-01-2010, 17:47
من يك تابع نوشتم كه يك گره از درخت جستجوي دودويي حذف مي كنه، اما براي ريشه جواب نمي ده.
كد تابع :

int BST_Tree :: del(int x){
node *q, *p, *t;
int k;
p = root ;
while(p)
if(x == p->data)
break;
else if(x > p->data){
q = p;
p = p->right ;
k=0;
}
else{
q = p;
p = p->left ;
k=1;
}
if(!p){
cout<<"Not found\n";
return 0;
}
if(p == root && !p->right && !p->left)
{
delete p;
root = NULL;
}
else if(!p->left && !p->right){
delete p;
if(k == 1)
q->left = NULL;
else
q->right = NULL;
}//if
else if( (p->left && !p-> right) || (p->right && !p->left) ){
if(p->left)
q->left = p->left;
else
q->right = p->right;
delete p;
}//if
else if(p->left && p->right){
t = p;
q = p->right;
while(q->left)
{
t = q;
q = q->left;
}
p->data = q->data;
delete q;
t->left = NULL;
}
return 1;
}