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

admin2016-03-29  7

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

选项

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

最新回复(0)