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
投稿

猜你喜欢

  • 解决response.setHeader设置下载文件名无效的问题

    2021-08-15 20:43:54
  • C#实现控制Windows系统关机、重启和注销的方法

    2023-07-24 17:15:05
  • java数据结构之java实现栈

    2023-11-25 05:32:36
  • Spring Boot中的那些条件判断的实现方法

    2023-04-26 15:02:07
  • Java版画板的实现方法

    2023-01-06 22:31:44
  • eclipse如何搭建Springboot项目详解

    2023-11-29 04:52:36
  • 如何动态修改JavaBean中注解的参数值

    2022-09-03 04:08:34
  • 老生常谈 Java中的继承(必看)

    2023-06-21 11:59:51
  • Java数组(Array)最全汇总(中篇)

    2022-09-05 06:01:02
  • Spring框架中@PostConstruct注解详解

    2021-09-20 09:35:58
  • 总结Java对象被序列化的两种方法

    2023-05-11 09:46:52
  • Java基础教程之String深度分析

    2022-08-19 05:42:15
  • 解决Spring在Thread中注入Bean无效的问题

    2022-06-26 13:03:59
  • Java KindEditor粘贴图片自动上传到服务器功能实现

    2023-08-07 01:42:33
  • 用java开发dota英雄最华丽的技能(实例讲解)

    2022-05-27 00:10:20
  • SpringCloud Feign远程调用实现详解

    2021-09-28 11:35:15
  • SpringCloud学习笔记之OpenFeign进行服务调用

    2021-05-25 12:32:58
  • Java 用反射设置对象的属性值实例详解

    2023-11-26 03:56:51
  • SpringBoot自定义MessageConverter与内容协商管理器contentNegotiationManager详解

    2023-11-28 11:35:54
  • IntelliJ IDEA本地代码覆盖后恢复原来的代码图解

    2022-03-09 22:42:19
  • asp之家 软件编程 m.aspxhome.com