已知二叉树排序树中某结点指针p,其双亲结点指针为fp,p为fp的左孩子。试编写算法,删除p所指结点。

admin2019-08-01  32

问题 已知二叉树排序树中某结点指针p,其双亲结点指针为fp,p为fp的左孩子。试编写算法,删除p所指结点。

选项

答案本题用被删结点右子树中最小值(中序遍历第一个)结点代替被删结点。 void Delete(BSTree bst,p,fo){ //在二叉排序树bst上,删除fo所指结点的左子女(由p所指向) jf(!p一>lchild){fo一>lchild=p一>rchild;free(p);} //p无左子女 else if(!p一>rchild){fo一>lchild=p一>lchild;free(p);} //p无右子女 else //p有左子女和右子女 {q=p一>rchild;s=q; //用p右子树中的最小值代替p结点的值 while(q一>lchild){s=q;q=q一>lchild;} //查p右子树中序序列最左结点 if(s==p一>rchild) //p右子树的根结点无左子女 {p一>data=s一>data;p一>rchild=s->rchild;frees);} else{p一>data=q一>data;s一>lchild=q->rchild;free(q);} } }

解析
转载请注明原文地址:https://kaotiyun.com/show/zACi777K
0

随机试题
最新回复(0)