社区
数据结构与算法
帖子详情
查找二叉树怎么删除节点
tiancai110a
2012-09-21 01:54:25
左右节点都存在的情况下
语言描述
不要代码
...全文
1769
7
打赏
收藏
查找二叉树怎么删除节点
左右节点都存在的情况下 语言描述 不要代码
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,007
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章