二叉搜索树使用c++语言如何实现删除节点的操作( 二 )


            if (t->left==nullptr)
                  return t;
            else
                  findmin(t->left);
      };
      //find a maximum value
      struct node*findmax(struct node*t)
      {
            if (t==nullptr)
                  return nullptr;
            if (t->right==nullptr)
                  return t;
            else
                  findmax(t->right);
      };
      //if a node in Binary search tree
      bool contains(struct node* t,int item)
      {
            if (t==nullptr)
                  return false;
            else if (item>t->key)
                  contains(t->right,item);
            else if (item<t->key)
                  contains(t->left,item);
            else
                  return true;
      }
      //delete a node
      struct node* deleteNode(struct node* t,int item)
      {
                  if (t==nullptr)
                        return t;
                  if (item<t->key)
                        t->left=deleteNode(t->left,item);
                  else if (item>t->key)
                        t->right=deleteNode(t->right,item);
                  else
                  {
                        if (t->left==nullptr)
                        {
                              struct node *temp=t->right;
                              delete t;
                              return temp;
                        }
                        else if (t->right==nullptr)
                        {
                              struct node*temp=t->left;delete t;
                              return temp;
                        }
                        struct node* temp=findmin(t->right);

推荐阅读