需再次了解:
package com.qdcz.breadth.demo;
import java.util.ArrayList;
import java.util.List;
/**
 * 
 * <p>Title: TwoforktreeAl</p>
 * <p>Description: 
 *  二叉树定义: 二叉树(binary tree)是结点的有限集合,这个集合或者空,或者由一个根及两个互不相交的称为这个根的左子树或右子树构成. </br>
 *  二叉树与一般树的区别:
 *      一般树的子树不分次序,而二叉树的子树有左右之分.</br>
 *      由于二叉树也是树的一种,所以大部分的树的概念,对二叉树也适用.</br>
 *      二叉树的存贮:每个节点只需要两个指针域(左节点,右节点),有的为了操作方便也会 增加指向父级节点的指针,除了指针域以外,还会有一个数据域用来保存当前节点的信息</br>
 *  二叉树的特点 :
 *      性质1:在二叉树的第i层上至多有2^(i-1)个节点(i >= 1)</br>
 *      性质2:深度为k的二叉树至多有2^(k-1)个节点(k >=1)</br>
 *      性质3:对于任意一棵二叉树T而言,其叶子节点数目为N0,度为2的节点数目为N2,则有N0 = N2 + 1。</br>
 *      性质4:具有n个节点的完全二叉树的深度 。</br>
 *  二叉树的遍历分为三种:前序遍历 中序遍历 后序遍历</br>
 *      前序遍历:按照“根左右”,先遍历根节点,再遍历左子树 ,再遍历右子树</br>
 *      中序遍历:按照“左根右“,先遍历左子树,再遍历根节点,最后遍历右子树</br>
 *      后续遍历:按照“左右根”,先遍历左子树,再遍历右子树,最后遍历根节点 </br>
 *    <a href="http://blog.csdn.net/gfj0814/article/details/51637696">具体资料</a></p>
 * <p>Company:奇点创智 </p> 
 * <p>Version:1.0 </p> 
 * @author Administrator
 * @date 2017年6月6日 上午11:06:49
 */
public class TwoforktreeAl {
	private Node root;
	private List<Node> list=new ArrayList<>();
	public TwoforktreeAl() {
		init();
	}
	/**
	 * 
	 *<p>Title:init </p>
	 *<p>Description:初始化。先从叶子开始。由叶到跟 </p>
	 *@return void
	 *@author Administrator
	 *@date 2017年6月6日  上午11:05:44
	 */
	private void init() {
		Node x=new Node("X",null,null);
		Node y=new Node("Y",null,null);
		Node d=new Node("D",x,y);
		Node e=new Node("E",null,null);
		Node f=new Node("F",null,null);
		Node c=new Node("C",e,f);
		Node b=new Node("B",d,null);
		Node a=new Node("A",b,c);
		root=a;
	}
	/**
	 * 
	 * <p>Title: Node</p>
	 * <p>Description:定义节点类 </p>
	 * <p>Company: </p> 
	 * <p>Version: </p> 
	 * @author Administrator
	 * @date 2017年6月6日 上午11:02:17
	 */
	private class Node{
		private String data;
		private Node lchid;//定义指向左边字树的指针
		private Node rchild;//定义指向右子树的指针
		public Node(String data, Node lchid, Node rchild) {
			super();
			this.data = data;
			this.lchid = lchid;
			this.rchild = rchild;
		}
		@Override
		public String toString() {
			return "[data=" + data + ", lchid=" + lchid + ", rchild=" + rchild+"]" ;
		}
		
	}
	/**
	 * 
	 *<p>Title:preOrder </p>
	 *<p>Description:二叉树初期遍历,遍历结果 放List;前序遍历:ABDXYCEF</p>
	 *@param node
	 *@return void
	 *@author Administrator
	 *@date 2017年6月6日  上午11:01:33
	 */
	public void preOrder(Node node){
		list.add(node);
		if(node.lchid!=null){//如果左子树不为空继续往左找,在递归调用方法的时候一直会将子树的根存入list,这就做到了先遍历根节点
			preOrder(node.lchid);
		}
		if(node.rchild!=null){//无论走到哪一层,只要当前节点左子树为空,那么就可以在右子树上遍历,保证了根左右的遍历顺序
			preOrder(node.rchild);
		}
	}
	/**
	 * 
	 *<p>Title: inOrder</p>
	 *<p>Description:对二叉树进行中期遍历,结果存list</p>
	 *@param node
	 *@return void
	 *@author Administrator
	 *@date 2017年6月6日  上午11:00:39
	 */
	public void inOrder(Node node){
		if(node.lchid!=null){
			inOrder(node.lchid);
		}
		list.add(node);
		if(node.rchild!=null){
			inOrder(node.rchild);
		}
	}
	/**
	 * 
	 *<p>Title: postOrder</p>
	 *<p>Description:对二叉树后期遍历,遍历结果储到List中 </p>
	 *@param node
	 *@return void
	 *@author Administrator
	 *@date 2017年6月6日  上午10:59:05
	 */
	public void postOrder(Node node){
		if(node.lchid!=null){
			postOrder(node.lchid);
		}
		if(node.rchild!=null){
			postOrder(node.rchild);
		}
		list.add(node);
	}
	/**
	 * 
	 *<p>Title:getTreeDepth </p>
	 *<p>Description:返回当前深度</br>
	 * 说明:
     *  1、如果一棵树只有一个结点,它的深度为1。</br>
     *  2、如果根结点只有左子树而没有右子树,那么树的深度是其左子树的深度加1;</br>
     *  3、如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1;</br>
     *  4、如果既有右子树又有左子树,那该树的深度就是其左、右子树深度的较大值再加1。</br>
	 * </p>
	 *@param node
	 *@return
	 *@return int
	 *@author Administrator
	 *@date 2017年6月6日  上午10:57:25
	 */
	public int getTreeDepth(Node node){
		if(node.lchid==null&&node.rchild==null){
			return 1;
		}
		int left=0,right=0;
		if(node.lchid!=null){
			left=getTreeDepth(node.lchid);
		}
		if(node.rchild!=null){
			right=getTreeDepth(node.rchild);
		}
		return left>right? left+1:right+1;
	}
	/**
	 * 
	 *<p>Title: getResult</p>
	 *<p>Description:获取遍历结果 </p>
	 *@return
	 *@return List<Node>
	 *@author Administrator
	 *@date 2017年6月6日  上午10:57:09
	 */
	public List<Node> getResult(){
		return list;
	}
	public static void main(String[] args) {
		TwoforktreeAl tfa=new TwoforktreeAl();
		System.out.print("根节点为:"+tfa.root.toString());
		System.out.println();
		tfa.postOrder(tfa.root);
		for (Node node : tfa.getResult()) {
			System.out.print(node.data);
		}
		System.out.println();
		System.out.println("树的深度是:"+tfa.getTreeDepth(tfa.root));
	}
}
原文:http://www.cnblogs.com/1x-zfd50/p/6959146.html