写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。设删除结点由指针p所指,其双亲结点由指针f所指,并假设被删除结点是其双亲结点的右孩子。描述上述算法。

admin2018-08-12  29

问题 写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。设删除结点由指针p所指,其双亲结点由指针f所指,并假设被删除结点是其双亲结点的右孩子。描述上述算法。

选项

答案void Delete(BSTree t,p){ //在二叉排序树t中,删除f所指结点的右孩子(由p所指向) if(p一>lchild==null){f一>rchild=p一>rchild;free(p);}//p无左子女 else{ //ffj 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);} } }

解析
转载请注明原文地址:https://jikaoti.com/ti/f1fjFFFM
0

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