定义

                    二叉树:在数据结构中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作为

             “左子树”和右子树。二叉树通常被用于实现二叉查找树和二叉堆。

        特点

                  二叉树的每个节点至多只有两颗子树(不存在度大于2的结点),需要注意的是二叉树的子树

             是有左右之分的,次序不能颠倒。其第i层最多有二叉树的实现及先序、中序、后序遍历_二叉树个结点;深度为k的二叉树最多有二叉树的实现及先序、中序、后序遍历_后序遍历_02

             个结点;对于任意一颗二叉树T,如果其叶子结点树为n0,度为2的结点树为n2,则n0=n2 + 2(根结

             点除外)。

                          二叉树的实现及先序、中序、后序遍历_先序遍历_03

         存储表示

                  二叉树可以使用数组或者顺序表来表示,这种实现方式更有利于紧凑的存储和更好的访问

             局部性,但是他需要连续的存储空间,在极端的情况下,如果一颗二叉树只有右子树,那么空

             间的浪费将会异常的严重。

                  二叉树还可以使用链表的存储方式来实现,这也是推荐的实现方式。在Java中具体的树节点

             的具体表示情况如下:

class TreeNode<T> { 		private T data; 		private TreeNode<T> leftNode; 		private TreeNode<T> rightNode;  		public TreeNode(T data, TreeNode<T> leftNode, TreeNode<T> rightNode) { 			this.data = data; 			this.leftNode = leftNode; 			this.rightNode = rightNode; 		} }  
              对于二叉树的具体操作笔者不会去详细的实现,感兴趣的是二叉树的遍历方式。

         二叉树的遍历

                    对于二叉树的遍历方式一般分为三种先序、中序、后序三种方式

                 先序遍历

                  若二叉树为空,则不进行任何操作:否则

                       1、访问根结点。

                       2、先序方式遍历左子树。

                       3、先序遍历右子树。

                中序遍历

                  若二叉树为空,则不进行任何操作:否则

                       1、中序遍历左子树。

                       2、访问根结点。

                       3、中序遍历右子树。

               后序遍历

                  若二叉树为空,则不进行任何操作:否则

                       1、后序遍历左子树。

                       2、后序遍历右子树。

                       3、放问根结点。

               遍历的情况如下:

                 二叉树的实现及先序、中序、后序遍历_二叉树_04

                二叉树遍历的代码实现:

package com.kiritor;  /**  * Java二叉树的实现 以及遍历  *   * @author Kiritor  */ public class BinaryTree { 	 	/** 	 * 输出结点信息*/ 	public void printNode(TreeNode<String> node) 	{ 		System.out.print(node.getData()+"  "); 	} 	/** 	 * 定义结点 	 * */ 	class TreeNode<T> { 		private T data; 		private TreeNode<T> leftNode; 		private TreeNode<T> rightNode;  		public TreeNode(T data, TreeNode<T> leftNode, TreeNode<T> rightNode) { 			this.data = data; 			this.leftNode = leftNode; 			this.rightNode = rightNode; 		} 		  		public T getData() { 			return data; 		}  		public void setData(T data) { 			this.data = data; 		}  		public TreeNode<T> getLeftNode() { 			return leftNode; 		}  		public void setLeftNode(TreeNode<T> leftNode) { 			this.leftNode = leftNode; 		}  		public TreeNode<T> getRightNode() { 			return rightNode; 		}  		public void setRightNode(TreeNode<T> rightNode) { 			this.rightNode = rightNode; 		}  	}  	// 初始化二叉树 	public TreeNode<String> init() { 		TreeNode<String> D = new TreeNode<String>("D", null, null); 		TreeNode<String> H = new TreeNode<String>("H", null, null); 		TreeNode<String> I = new TreeNode<String>("I", null, null); 		TreeNode<String> J = new TreeNode<String>("J", null, null); 		TreeNode<String> P = new TreeNode<String>("P", null, null); 		TreeNode<String> G = new TreeNode<String>("G", P, null); 		TreeNode<String> F = new TreeNode<String>("F", null, J); 		TreeNode<String> E = new TreeNode<String>("E", H, I); 		TreeNode<String> B = new TreeNode<String>("B", D, E); 		TreeNode<String> C = new TreeNode<String>("C", F, G); 		TreeNode<String> A = new TreeNode<String>("A", B, C); 		return A; 	} 	/**先序遍历二叉树 	 * */ 	public void xianIterator(TreeNode<String> node) 	{ 		this.printNode(node); 		if(node.getLeftNode()!=null) 		{ 			this.xianIterator(node.getLeftNode()); 		} 		if(node.getRightNode()!=null) 		{ 			this.xianIterator(node.getRightNode()); 		} 	} 	 	/** 	 * 中序遍历二叉树*/ 	public void zhongIterator(TreeNode<String> node) 	{ 		if(node.getLeftNode()!=null) 		{ 			this.zhongIterator(node.getLeftNode()); 		} 		this.printNode(node); 		if(node.getRightNode()!=null) 		{ 			this.zhongIterator(node.getRightNode()); 		} 	} 	 	/**后序遍历二叉树*/ 	public void houIterator(TreeNode<String> node) 	{ 		if(node.getLeftNode()!=null) 		{ 			this.houIterator(node.getLeftNode()); 		} 		if(node.getRightNode()!=null) 		{ 			this.houIterator(node.getRightNode()); 		} 		this.printNode(node); 	} 	 	public static void main(String[] args) { 	   BinaryTree binaryTree = new BinaryTree(); 	   TreeNode<String> node = binaryTree.init(); 	   System.out.println("先序遍历的情况"); 	   binaryTree.xianIterator(node); 	   System.out.println("\n中序遍历的情况"); 	   binaryTree.zhongIterator(node); 	   System.out.println("\n后序遍历的情况"); 	   binaryTree.houIterator(node); 	} 	 } 
                   二叉树的实现及先序、中序、后序遍历_先序遍历_05