java兄弟_java实现兄弟孩子树代码
树的表示方法很多,双亲儿子,双亲,儿子,儿子兄弟表示法。
但是用来表示树的最多的方式是儿子兄弟表示法。
第一,可以用来表示孩子节点不相同的树。
第二,不浪费存储空间。
一下贴出代码:
===============================节点类=================================
package sonBrotherTree;
public class TreeNode {
private TreeNode sonNode;//这里存储的是最左的儿子节点
private TreeNode brotherNode;//这里存储的是自己的兄弟节点
private int value;
public TreeNode(TreeNode sonNode,TreeNode brotherNode,int value){
this.sonNode = sonNode;
this.brotherNode = brotherNode;
this.value = value;
}
public TreeNode getSonNode(){
return this.sonNode;
}
public TreeNode getBrotherNode() {
return brotherNode;
}
public int getValue(){
return value;
}
public void setSonNode(TreeNode sonNode){
this.sonNode = sonNode;
}
public void setBrotherNode(TreeNode brotherNode){
this.brotherNode = brotherNode;
}
}
========================树类
package sonBrotherTree;
/**
*
* @author anping
* 主要是对树的实现
* 不提供删除指定节点的方法,是因为该树的节点是没有指向父亲的
*/
public class SonBrotherTree {
private TreeNode root;//这个是根节点
public SonBrotherTree(int rootValue){
//构建树的时候需要吧根节点的值初始化一下
root= new TreeNode(null,null,rootValue);
}
//拿到根节点
public TreeNode getRoot(){
return this.root;
}
/**
* 插入儿子节点需要注意的是,假如已经有了儿子节点怎么办??
* 没有又怎么办??
* 假如没有的话好办,直接插入即可。
* 但是要是有的话,把原有的儿子变成现在儿子的兄弟
* @param targetNode
* @param value
*/
public TreeNode insertSonNode(TreeNode targetNode,int value){
TreeNode nowSonNode = new TreeNode(null, null, value);
TreeNode preSonNode = targetNode.getSonNode();
if(preSonNode!=null){
//先见前儿子变成现在儿子的兄弟,然后在添加儿子
nowSonNode.setBrotherNode(preSonNode);
}
targetNode.setSonNode(nowSonNode);
return nowSonNode;
}
/**
* 插入的兄弟要是有兄弟怎么办?吧现在的兄弟插入。而原有的兄弟变成现在兄弟的兄弟
* 如果没有,那么直接插入
* @param targetNode
* @param value
*/
public TreeNode insertBrotherNode(TreeNode targetNode ,int value){
TreeNode nowBrotherNode = new TreeNode(null, null, value);
TreeNode preBrotherNode = targetNode.getBrotherNode();
if(preBrotherNode!=null){
nowBrotherNode.setBrotherNode(targetNode.getBrotherNode());
}
targetNode.setBrotherNode(nowBrotherNode);
return nowBrotherNode;
}
/**
* 删除兄弟的时候如果只有这个兄弟那么先把兄弟的子孙全部删除,在删除该兄弟
* 如果还有其他的兄弟,那么需要保留其他的兄弟。
*/
public void deleteBrotherNode(TreeNode targetNode){
if(targetNode!=null &&targetNode.getBrotherNode()!=null)
{
this.destoryNode(targetNode.getBrotherNode());
}
}
/**
* 删除儿子的时候如果儿子不是null 的先吧儿子的子孙全删掉
* @param sonNode
*/
public void deleteSonNode(TreeNode targetNode){
if(targetNode!=null && targetNode.getSonNode()!=null){
this.destoryNode(targetNode.getSonNode() );
}
}
/**
* 通过遍历整颗树来拿取数据
* @param value
* @return
*/
public TreeNode searchValue(int value){
return this.searchValue(root, value);
}
/**
* 使用递归取出值,递归用的少,真的是不熟。
* @param node
* @param value
* @return
*/
public TreeNode searchValue(TreeNode node,int value){
if(node.getValue()==value){
return node;
}
if (node.getValue()!=value&&node.getSonNode()!=null){
return searchValue(node.getSonNode(), value);
}
if(node.getValue()!=value&&node.getBrotherNode()!=null){
return searchValue(node.getBrotherNode(), value);
}
return null;
}
/**
* 已图形的方式遍历出来
*/
public static void main(String[] args) {
SonBrotherTree tree = new SonBrotherTree(12);
TreeNode rootSon = tree.insertSonNode(tree.getRoot(), 100);
TreeNode rootSonBrother = tree.insertBrotherNode(rootSon, 122);
tree.insertSonNode(tree.getRoot(),101);
tree.insertSonNode(rootSonBrother,101);
System.out.println(tree.getRoot().getValue()+”–”+tree.getRoot().getSonNode().getValue()+”—”+tree.getRoot().getSonNode().getBrotherNode().getValue());
TreeNode search = tree.searchValue(101);
System.out.println(search);
}
private void destoryNode(TreeNode node){
if(node.getSonNode()!=null){
destoryNode(node.getSonNode());
}
if(node.getBrotherNode()!=null){
destoryNode(node.getBrotherNode());
}
node.notify();
node=null;
}
}
java兄弟_java实现兄弟孩子树代码相关推荐
- java图像增强_java图片对比度调整示例代码
前言 本文主要给大家介绍了关于java图片对比度调整的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下 测试代码 public static void main(Stri ...
- java冗余_Java使用lombok消除冗余代码的方法步骤
一.项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法. lombok项目的产生就是为了 ...
- java饼图_java 百分比饼图的实现代码
文章介绍了利用jfreechart来实现在java中的百分比饼图效果,有需要的同这可以参考一下. 一个显示百分比的饼图如下 实现代码 代码如下 复制代码 import="org.jfree ...
- java 条件编译_Java条件编译:如何防止代码块被编译?
Java条件编译:如何防止代码块被编译? 我的项目需要Java 1.6进行编译和运行. 现在,我有一个要求使其与Java 1.5一起使用(从市场营销方面). 我想替换方法主体(返回类型和参数保持相同) ...
- java来电_JAVA来电显示接口调用代码实例
代码描述:基于JAVA的来电显示接口调用代码实例 关联数据:手机固话来电显示 接口地址:http://www.juhe.cn/docs/api/id/72 import java.io.Buffere ...
- java 二分法_java实现二分法的完整代码
二分法查找,顾名思义就是要将数据每次都分成两份然后再去找到你想要的数据,我们可以这样去想,二分法查找很类似与我们平时玩的猜价格游戏,当你报出一个价格时裁判会告诉你价格相对于真实值的高低,倘若是低了那我 ...
- java排他_Java排他锁实现的代码详解
这篇文章主要介绍了Java编程实现排他锁的相关内容,叙述了实现此代码锁所需要的功能,以及作者的解决方案,然后向大家分享了设计源码,需要的朋友可以参考下. 一 .前言 某年某月某天,同事说需要一个文件排 ...
- java generate()_Java IntStream generate()用法及代码示例
IntStream generate(IntSupplier s)返回一个无限顺序无序流,其中每个元素由提供的IntSupplier(提供int值的结果)生成.这适用于生成恒定流,随机元素流等. 用法 ...
- java formatter()_Java Formatter locale()用法及代码示例
locale()方法是java.util.Formatter的内置方法,该方法返回语言环境.此区域设置由格式化程序构造设置.具有语言环境参数的该对象的format方法不会更改此值. 用法: publi ...
最新文章
- 批处理编程的异类——时钟(Clock)
- SPOJ - LIS2 Another Longest Increasing Subsequence Problem
- python循环语句-Python-循环语句及循环控制语句
- 凡客即便走小米模式也很难
- android listview 中的checkbox,Android中ListView与CheckBox的使用,及问题解决
- DirectX11 With Windows SDK--17 利用几何着色器实现公告板效果
- 计算机仿真作业三,计算机仿真技术作业三.doc
- 《盘点那些秀你一脸的秒天秒地算法》(3)
- Hadoop伪分布安装详解(一)
- JS面向对象编程实现
- 数据结构(六) 排序
- Java 实现 RSA 非对称加密算法-加解密和签名验签
- monkey4444勒索病毒解密方法方案成功处理复旦安全实验室
- hive 复合结构Map、Struct详解
- Thinkpad笔记本没有声音的解决办法参考
- 倍福BECKHOFF PLC:自动化编程入门1
- 多线程抓取链家网数据
- Windows本地认证
- wald检验_Stata: 面板 Granger 因果检验
- java手机游戏ios_我的世界JAVA版本ios版