社区
数据结构与算法
帖子详情
查找二叉树怎么删除节点
tiancai110a
2012-09-21 01:54:25
左右节点都存在的情况下
语言描述
不要代码
...全文
1795
7
打赏
收藏
查找二叉树怎么删除节点
左右节点都存在的情况下 语言描述 不要代码
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
耶鲁於
2014-10-25
打赏
举报
回复
个人感觉三楼的方法很合理,画一棵树出来再看,一目了然。
tiancai110a
2012-11-27
打赏
举报
回复
答案应该是 遍历左子树找到最大的节点(即左子树最右边的那个节点)或者右子树最小的节点替(即右子树最左边的节点)替换该节点,然后删除那个末端节点,即为了保持原有性质不变
windmissing
2012-09-26
打赏
举报
回复
(1)设要删除的结点是x,x有两个孩子的情况
step1:找到结点x的后继y,可知:y是x右子树中最左结点,且y没有左孩子
step2:把y的关键字给x,即让结点x成为结点y
step3:删除y,因为y没有左孩子,所以按照(2)的方法删除y
(2)设要删除的结点是y,y没有左孩子情况
若y没有右孩子,则直接删除y
若y有右孩子,设y的右孩子为z,y的父结点为p,则让z成为p的孩子,并删除y
palm008
2012-09-26
打赏
举报
回复
分如下几步:代码可以看我的共享
1.删除时只考虑删除,并标记平衡因子
2.根据平衡因子旋转树(这个比较复杂)
xiguaxue
2012-09-22
打赏
举报
回复
分多种情况讨论
1.被删除节点没有子树的情况,直接删除,并修改对应父节点的指针为空。
2.对于只有一个子树的情况,考虑将其子树作为其父节点的子树,关于是左还是右,根据被删除的节点确定。
3.最复杂的是有两个子数的情况,可以考虑两种方法,都是同样的思想:用被删除节点A的左子树的最右节点或者A的右子树的最左节点作为替代A的节点,并修改相应的最左或最右节点的父节点的指针,修改方法类似2
/**********删除二叉树节点的操作***********/
btree deletenode(btree root,int node)
{
btree parent;
btree point;
btree child;
int postion;
parent=binary_search(root,node,&postion);
//二叉树为空的情况
if(parent==NULL)
return root;
else
{
switch(postion)
{ case -1:point=parent->left;break;
case 1 :point=parent->right;break;
case 0 :point=parent;break;
}
if(point->left==NULL&&point->right==NULL)
{
switch(postion)
{
case -1:parent->left=NULL;break;
case 1:parent->right=NULL;break;
case 0:parent=NULL;break;
}
free(point);
return root;
}
if(point->left==NULL&&point->right!=NULL)
{
if(postion==-1)
parent->left=point->right;
else
if(postion==1)
parent->right=point->right;
else
root=root->right;
free(point);
return root;
}
if(point->left!=NULL&&point->right==NULL)
{
if(postion==-1)
parent->left=point->left;
else
if(postion==1)
parent->right=point->left;
else
root=root->left;
return root;
}
if(point->left!=NULL&& point->right!=NULL)
{
parent=point;
child=point->left;
while(child->right!=NULL)
{
parent=child;
child=child->right;
}
point->data=child->data;
if(parent->left=child)
parent->left=child->left;
else
parent->right=child->left;
free(child);
return root;
}
}
}
mkcing
2012-09-22
打赏
举报
回复
1,找到其后继,处理后继右子树
2,用后继代替
mkcing
2012-09-22
打赏
举报
回复
1,找到这节点的后继,先处理后继的右子树,后继没有左子树
2,用后继代替这个要删除的节点
二叉树
节点
插入
删除
查找
二叉树
节点
插入
删除
查找
二叉树
节点
访问 数据结构课程设计
查找
二叉树
上面的某个
节点
的C++实现
查找
二叉树
上面的某个
节点
的C++实现
查找
二叉树
上面的某个
节点
的C++实现
前序遍历中序遍历生成
二叉树
并
查找
节点
设
二叉树
结点值为大写字母,输入
二叉树
的前序遍历和中序遍历序列,生成此
二叉树
,输出该
二叉树
的后序遍历和按层次遍历序列。输入某结点值,在
二叉树
中
查找
该结点,若该结点存在,则输出从根到该结点的路径,否则给出不存在信息。
线索
二叉树
通过前序序列创建线索
二叉树
1:中序遍历 2:
查找
节点
前驱后继 3:插入
节点
4:
删除
节点
0:退出
二叉树
的建立
二叉树
的建立,利用左右孩子指针,
查找
节点
并求指定
节点
路径
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章