二叉排序树删除节点的操作

l52100w 2012-05-07 02:00:14
void Delete(Bitree &p)
{//从二叉排序树中删除节点p,并重接它的左或右子树
if(!p->rchild)//右子树空则只需重接它的左或右字数
{
q=p;p=p->lchild;
free(q);
}
else if(!p->lchild)//只需重接它的右子树
{
q=p;
p=p->rchild;
free(q);
}
else//左右字数均不空
{
q=p;
s=p->lchild;
while(s->rchild)
{//转左,然后向右到尽头
q=s;
s=s->rchild
}
p->data=s->data; //s指向被删除节点的前驱
if(q!=p) q->rchild=s->lchile; //重接*q的柚子树
else q->lchild=s->lchild;//重接*q的左子树
}

}
上面红体字部分什么意思,看不懂啊
...全文
315 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
l52100w 2012-05-07
  • 打赏
  • 举报
回复
thank you
W170532934 2012-05-07
  • 打赏
  • 举报
回复
不好意思看错了。没有注意到排序两个字。
删除的节点拥有左右子节点,那么必须寻找到一个节点放置在该节点处。所以最接近的节点就是左子树的最右端的叶子节点,既:中序遍历的时候当前删除节点的前继节点。然后将该节点内的值赋值给删除的节点,再重新拼接二叉树就OK啦。可以画个图看看就知道了
l52100w 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你这个肯定不是普通的二叉树,最好把信息提供完整了。我觉得你说的这好像是二叉排序树????
[/Quote]
就是二叉排序树啊,上面题目写了啊,这是二叉排序树的删除结点的操作,代码完整了啊
W170532934 2012-05-07
  • 打赏
  • 举报
回复
你这个肯定不是普通的二叉树,最好把信息提供完整了。我觉得你说的这好像是二叉排序树????

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧