用 java 实现二叉树

/**
 * 说明生活中遇到的二叉树,用 java 实现二叉树 。
	这是组合设计模式。 
	我有很多个(假设 10 万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在
	某个数据, (我想说出二叉树的好处, 该怎么说呢?那就是说别人的缺点) , 假如存在数组中,
	那么,碰巧要找的数字位于 99999那个地方,那查找的速度将很慢,因为要从第 1 个依次往 67
	后取,取出来后进行比较。平衡二叉树(构建平衡二叉树需要先排序,我们这里就不作考虑
	了)可以很好地解决这个问题,但二叉树的遍历(前序,中序,后序)效率要比数组低很多,

 * store(int value)可以选择二叉树中是否可以存在相同的值
 */

package test;

//Node,准确的说,是树(包括子树)的根节点
public class Node{
	public int value;
	public Node left;
	public Node right;
	//这种存储方式,是:往已经存在的节点的左右子节点上寻找插入点,而不是考虑作为已经存在的节点的父节点,会造成二叉树的不平衡
	public void store(int value){
		if(value<this.value){
			if(left==null){
				left = new Node();
				left.value=value;
			}else{
				left.store(value);
			}
		}else if(value>this.value){
			if(right==null){
				right = new Node();
				right.value=value;
			}else{
				right.store(value);
			}
		}//已经存在的值,不插入
	}
	//先序遍历
	public void preList(){
		System.out.print(this.value+",");
		if(left!=null)left.preList();
		if(right!=null)right.preList();
	}
	//中序遍历
	public void middleList(){
		
		if(left!=null)left.middleList();
		System.out.print(this.value+",");
		if(right!=null)right.middleList();
	}
	public void afterList(){
		
		if(left!=null)left.afterList();		
		if(right!=null)right.afterList();
		System.out.print(this.value+",");
	}
	
	
	public static void main(String [] args){
		int[] data = new int[20];
		for(int i=0; i<data.length; i++){
			data[i] = (int)(Math.random()*100)+1;//0+1<<x*100+1<<1*100+1
			System.out.print(data[i]+",");
		}
		System.out.println();
		Node root = new Node();
		root.value = data[0];
		for(int i=1; i<data.length; i++){
			root.store(data[i]);
		}
		root.preList();
		System.out.println();
		root.middleList();
		System.out.println();
		root.afterList();
		
	}
	
}

首先说明,该二叉树建的并不好,存储节点时,只能向空节点填充,而不同调整树的结构。

我曾经写过一个C++的二叉树,同样的思路,当时觉得这种思路弱爆了,等到看见这篇程序,我恍然大悟:傻傻的路上不会孤单。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值