java使用归并删除法删除二叉树中节点的方法
作者:hitxueliang 时间:2022-03-31 23:06:12
本文实例讲述了java使用归并删除法删除二叉树中节点的方法。分享给大家供大家参考。具体分析如下:
实现的思想很简单:
first:找到要删除的节点
second:如果删除的节点没有右子树那么左子树链到父节点
third:如果删除的节点没有左子树那么右子树链到父节点
forth:如果删除的节点又左右孩子,那么可以归并删除节点后的子树:方法有两种一种是用删除节点的左子树的最右节点,指向删除节点的右子树,另一种是用删除节点的用字数的最左节点指向删除节点的左子树。
Java 实现如下:
public void deleteByMerging(int el)
{
IntBSTNode tmp,node,p=root,prev=null;
/*find the node to be deleted*/
while(p!=null&&p.key!=el)
{
prev=p;
if(p.key<el)
p=p.right;
else p=p.left;
}
/*find end*/
node=p;
if(p!=null&&p.key==el)
{
if(node.right==null)
//node has no right child then its left child (if any) is attached to
node=node.left;
//its parent
else if(node.left==null)
//node has no left child then its right child (if any) is attched to
node=node.right
//its parent
else{
tmp=node.left;
while(tmp.right!=null)
tmp=tmp.right;
//find the rightmost node of the left subtree
tem.right=node.right;
//establish the link between the rightmost node of the left subtree and the right subtree
node=node.left;
}
if(p==root)
{
root=node;
}
else if (prev.left==p)
{
prev.left=node;
}
else prev.right=node
}
else if(root!=null)
{
System.out.println("the node is not in the tree");
}
else System.out.println("The tree is empty");
}
希望本文所述对大家的java程序设计有所帮助。
标签:java,二叉树,节点
0
投稿
猜你喜欢
详解JavaScript中的函数声明和函数表达式
2023-04-26 01:56:07
Java面向对象程序设计多态性示例
2021-09-24 11:57:57
C语言关于时间复杂度详解
2022-08-14 02:33:04
java同步之如何写一个锁Lock
2023-04-23 08:10:54
如何在IDEA Maven项目中导入本地jar包的步骤
2023-03-25 06:43:48
浅谈mybatis中SQL语句给boolean类型赋值问题
2023-01-19 15:15:42
Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例
2023-11-25 00:35:38
Android实现多点触控功能
2021-10-18 08:39:33
Android编程使WebView支持HTML5 Video全屏播放的解决方法
2022-04-11 08:25:15
C#中SQL Command的基本用法
2023-10-04 06:01:32
Android开发之MediaPlayer基本使用方法详解
2022-09-05 12:21:38
Spring集成Swagger常见错误及解决办法
2023-07-10 05:01:17
Springboot过滤器禁止ip频繁访问功能实现
2022-08-29 11:20:59
如何使用Jenkins构建GIT+Maven项目
2021-11-18 04:42:52
Springboot启动后立即某个执行方法的四种方式
2022-12-29 16:35:52
Spring Cloud 整合Apache-SkyWalking实现链路跟踪的方法
2023-04-05 09:17:52
详解C#设置Excel数据自适应行高、列宽的2种情况
2022-10-21 23:46:29
详解Android自定义控件属性
2023-09-27 18:00:34
Android 自定义圆形带刻度渐变色的进度条样式实例代码
2023-11-23 13:21:38
Android利用FlexboxLayout轻松实现流动布局
2021-06-24 02:41:53