Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Meet and Greet (http://www.go4expert.com/community/meet-and-greet/)
-   -   A bug in AVL tree deletion !!! Help pls !! (http://www.go4expert.com/community/bug-avl-tree-deletion-help-pls-t26804/)

swizzy 28Sep2011 23:14

A bug in AVL tree deletion !!! Help pls !!
 
Watz wrong with this avl tree deletion code ??

A node with a single child alone gets deleted..

But then for other nodes the program stops working and terminates abruptly as such..

i.e. abnormal termination as error report while such nodes are entered to be deleted..

Cud someone help me out ??

Cudn find out wy such error reports are popped !!

Here is my c++ code for avl deletion..


Code:

void remove(const comparable & x,avlnode* & r)
        {
                  if(r==NULL)
                              cout<<"\nNo element !!!";
                  else if(x<r->element)
                  {
                              remove(x,r->left);
                              if(avlheight(r->right)-avlheight(r->left)>1)
                                    if(avlheight(r->right->right)>=avlheight(r->right->left))
                                                rotatewithright(r);
                                    else
                                                doublewithright(r);
                  }
                  else if(x>r->element)
                  {
                              remove(x,r->right);
                              if(avlheight(r->left)-avlheight(r->right)>1)
                                    if(avlheight(r->left->left)>=avlheight(r->left->right))
                                                rotatewithleft(r);
                                    else
                                                doublewithleft(r);
                  }
                  else if(r->left!=NULL&&r->right!=NULL)
                  {
                        r->element=findmin(r->right)->element;
                        remove(r->element,r->right);
                  }
                  else
                  {
                      avlnode *oldnode=r;
                      r=(r->left!=NULL)?r->left:r->right;
                      delete oldnode;
                  }
                  r->height=max(avlheight(r->left),avlheight(r->right))+1;
              }



All times are GMT +5.5. The time now is 09:32.