java中级——集合框架【2】-二叉树

二叉树

二叉树概念

首先我们要明确,二叉树由各种节点组成;还有就是二叉树特点:(1)每个节点都可以有左子节点,右子节点(2)每一个节点都有一个

如图所示:

 

代码所示:

package cn.jse.node;

public class Node {

//左右节点、值

public Node leftNode;

public Node rightNode;

public Object value;

}

 

二叉树排序:插入数据与遍历

例子:

package cn.jse.node;

 

import java.util.ArrayList;

import java.util.List;

 

public class Node {

//左右节点、值

public Node leftNode;

public Node rightNode;

public Object value;

 

public void addData(Object v){

//如果当前节点没有值,就把数据放在当前节点上

if(null==value){

value=v;

}else{

//没有值就进行判断,新增的值与当前值的比较大小 大的右边,小的或者相等放左边

if((Integer)v-(Integer)value<=0){

if(null==leftNode){

leftNode = new Node();

}

leftNode.addData(v);

}else{

if(null == rightNode){

rightNode = new Node();

}

rightNode.addData(v);

}

}

}

 

//中序遍历所有的节点

public List<Object> values(){

List<Object> values = new ArrayList<>();

 

//左节点的遍历结果

if(null!=leftNode){

values.add(leftNode.values());

}

 

//当前节点

values.add(value);

 

//右节点的遍历结果

if(null!=rightNode){

values.add(rightNode.values());

}

 

return values;

}

 

public static void main(String[] args) {

//准备一个数组

int randoms[] =new int[]{55,6,13,45,16,23,28,9,50,36,18};

 

Node roots = new Node();

for(int num : randoms){

roots.addData(num);

}

System.out.println(roots.values());

}

}

 

控制台的输出结果:

[[6, [[9], 13, [[16, [[18], 23, [28, [36]]]], 45, [50]]]], 55]

不难发现,我们所给的数组就二叉树的形式进行排列了

其中遍历二叉树的遍历分左序,中序,右序
左序即: 中间的数遍历后放在左边
中序即: 中间的数遍历后放在中间
右序即: 中间的数遍历后放在右边

  

如果你还在学习其他的算法可以设计一个例子可以比较性能:

题目:创建4万个随机数,然后用分别用冒泡法选择法二叉树3种排序算法进行排序,比较哪种更快

 

我可以先给你答案:二叉树最优  具体比较的代码请移步下一篇java——二叉树比较冒泡和选择排序

posted @ 2017-05-12 12:52  lusCodding  阅读(308)  评论(0编辑  收藏  举报