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

admin2019-08-15  36

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

选项

答案 本题用被删结点右子树中最小值(中序遍历第一个)结点代替被删结点。 void Delete(BSTree bst,P,fp){ //在二叉排序树bst上,删除fp所指结点的左子女(由P所指向) if(!p一>lchild){fp一>lehild=p一>rchild;free(P);} //p无左子女 e]se if(!p一>rchild){fp一>]child=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/90Ci777K
0

相关试题推荐
最新回复(0)