JAVA遍歷二叉樹

taozihk發表於2016-05-17

二叉樹的概念   

二叉樹(Binary Tree)是個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。


現在我們給出一組二叉樹


二叉樹遍歷又分為先序遍歷(根節點-左子樹 -右子樹 )、中序遍歷(左子樹 -根節點-右子樹)、後序遍歷(左子樹-右子樹-根節點)

上述二叉樹的先中後遍歷結果分別為

先序遍歷:12---9---76---35---22---16---48---46---40---90

中序遍歷:9---12---16---22---35---40---46---48---76---90

後序遍歷:9---16---22---40---46---48---35---90---76---12


首先我們定義一個二叉樹資料結構的類

<pre name="code" class="java">class Node {
	int data; // 根節點資料
	Node left; // 左子樹
	Node right; // 右子樹

	public Node(int data) // 例項化二叉樹類
	{
		this.data = data;
		left = null;
		right = null;
	}
	//{ 12, 76, 35, 22, 16, 48, 90, 46, 9, 40};
	public void insert(Node root, int data) { // 向二叉樹中插入子節點
		if (data > root.data) // 二叉樹的左節點都比根節點小
		{
			if (root.right == null) {
				root.right = new Node(data);
			} 
			else{
				this.insert(root.right, data);
			}
		} 
		else 
		{ // 二叉樹的右節點都比根節點大
			if (root.left == null) {
				root.left = new Node(data);
			} 
			else {
				this.insert(root.left, data);
			}
		}
	}
}



遍歷二叉樹

<pre name="code" class="java">public class BinaryTree {

	public static void preOrder(Node root) {
		if (root != null) {
			System.out.print(root.data + "-");
			preOrder(root.left);
			preOrder(root.right);
		}
	}

	public static void inOrder(Node root) {
		if (root != null) {
			inOrder(root.left);
			System.out.print(root.data + "--");
			inOrder(root.right);
		}
	}

	public static void postOrder(Node root) {
		if (root != null) {
			postOrder(root.left);
			postOrder(root.right);
			System.out.print(root.data + "---");
		}
	}

	public static void main(String[] str) {
		int[] array = { 12, 76, 35, 22, 16, 48, 90, 46, 9, 40 };
		Node root = new Node(array[0]); // 建立二叉樹
		for (int i = 1; i < array.length; i++) {
			root.insert(root, array[i]); // 向二叉樹中插入資料
		}
		System.out.println("先序遍歷:");
		preOrder(root);
		System.out.println();
		System.out.println("中序遍歷:");
		inOrder(root);
		System.out.println();
		System.out.println("後序遍歷:");
		postOrder(root);
	}
}



列印結果:

先序遍歷:
12-9-76-35-22-16-48-46-40-90-
中序遍歷:
9--12--16--22--35--40--46--48--76--90--
後序遍歷:
9---16---22---40---46---48---35---90---76---12---

相關文章