经典指数          
原因
1169
浏览数
0
收藏数
 

写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。设删除结点由指针 p 所指,其双亲结点由指针 f 所指,并假设被删除结点是其双亲结点的右孩子。用类 PASCAL (或 C )语言将上述算法写为过程形式。

     举报   纠错  
 
切换
1 个答案
void  Delete(BSTree t,p)       // 在二叉排序树t中,删除f所指结点的右孩子(由p所指向)的算法      {if(p->lchild==null){f->rchild=p->rchild;free(p);} //p无左子女        else   //用p左子树中的最大值代替p结点的值          {q=p->lchild;s=q;           while(q->rchild){s=q;q=q->rchild ;}//查p左子树中序序列最右结点           if(s==p->lchild) //p左子树的根结点无右子女             {p->data=s->data;p->lchild=s->lchild;free(s);}           else{p->data=q->data;s->rchild=q->lchild;free(q);}           } }//Delete
 
切换
撰写答案
扫描后移动端查看本题