一直觉得用java来创建二叉树有点麻烦,因为我想传入一组数,就可以创建好二叉树,而不只是一个节点一个节点的去创建二叉树,这种方式代码冗长,很shit。。 #这里给出二叉树的树的节点定义
//定义一个树节点
class TreeNode{
	public Object data;
	public TreeNode lchild;
	public TreeNode rchild;
	
	public TreeNode(Object obj){
		this.data = obj;
		this.lchild = null;
		this.rchild = null;
		
	}
}
然后我们开始创建我们的二叉树,创建二叉树采用顺序存储结构的方式,这样传入一组Object[]数组,就可以创建一棵二叉树,这感觉棒棒的。。
//定义一棵树
class Tree{
	//定义一个树的头节点
	public TreeNode root;
	//定义一个指向当前树节点的指针,即引用
	private TreeNode current;
	public Tree(){
		root = null;
	}
	//创建一棵树    用顺序存储结构实现二叉树      用一个ArrayList来实现
	public void createTreeByOrder(Object[] objs){
		//定义一个ArrayList 来存储树的节点;
        ArrayList<TreeNode>  listNode = new ArrayList<TreeNode>();
        root = new TreeNode(objs[0]);
        listNode.add(root);
        current = root;
        for (int i = 0; i < objs.length/2; i++) {
			if(listNode.get(i)==null){
				continue;
			}
			else{
				current = listNode.get(i);
				if(2*i+1<objs.length){
					if(objs[2*i+1]==null){
						listNode.add(null);
					}
					else{
						TreeNode tnlnode = new TreeNode(objs[2*i+1]);
						current.lchild = tnlnode;
						listNode.add(tnlnode);
					}
				}
				if(2*i+2<objs.length){
					if(objs[2*i+2]==null){
						listNode.add(null);
					}
					else{
						TreeNode tnrnode = new TreeNode(objs[2*i+2]);
						current.rchild = tnrnode;
						listNode.add(tnrnode);
					}
				}
			}
		}
	}
}
树的3种遍历方式
//前序遍历二叉树
	public void preOrderTraverse(TreeNode root){
		if(root ==null){
			return;
		}
		else{
			System.out.print(root.data+"  ");
			preOrderTraverse(root.lchild);
			preOrderTraverse(root.rchild);
		}
	}
	
	//中序遍历
	public void inOrderTraverse(TreeNode root){
		if(root == null){
			return;
		}
		else{
			inOrderTraverse(root.lchild);
			System.out.print(root.data+"   ");
			inOrderTraverse(root.rchild);
		}
	}
	
	//后序遍历
	public void postOrderTraverse(TreeNode root){
		if(root == null){
			return;
		}
		else{
			postOrderTraverse(root.lchild);
			postOrderTraverse(root.rchild);
			System.out.print(root.data+"  ");
		}
	}