一直觉得用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+"  ");
		}
	}