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
  • asp之家 软件编程 m.aspxhome.com