1. 程式人生 > >java遍歷二叉樹:前序遍歷,中序遍歷,後序遍歷,遍歷深度,求葉子節點個數,層次遍歷

java遍歷二叉樹:前序遍歷,中序遍歷,後序遍歷,遍歷深度,求葉子節點個數,層次遍歷

import java.util.ArrayDeque;
import java.util.Queue;
 
public class CreateTree {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Node root = new Node();
		root.data = 9;
 
		Node temp01 = new Node();
		temp01.data = 1;
		root.left = temp01;
 
		Node temp02 = new Node();
		temp02.data = 3;
		root.right = temp02;
 
		Node temp03 = new Node();
		temp03.data = 2;
		root.left.left = temp03;
 
		Node temp04 = new Node();
		temp04.data = 4;
		root.left.right = temp04;
 
		Node temp05 = new Node();
		temp05.data = 8;
		root.right.left = temp05;
 
		Node temp06 = new Node();
		temp06.data = 6;
		root.left.left.left = temp06;
 
		Node temp07 = new Node();
		temp07.data = 7;
		root.left.left.right = temp07;
 
		System.out.println("--------先序遍歷----------");
		SelectTree1(root);
		System.out.println();
		System.out.println("---------中序遍歷---------");
		SelectTree(root);
		System.out.println();
		System.out.println("---------後序遍歷---------");
		SelectTree2(root);
		System.out.println();
		System.out.println("----------葉節點個數-----------");
		int i = leafNum(root);
		System.out.println(i);
		System.out.println("----------層次遍歷二叉樹-----------------");
		levelOrder(root);
 
		System.out.println();
		int j = deep(root);
		System.out.println("---------高度---------");
		System.out.println(j);
 
	}
 
	// 中序遍歷
	public static void SelectTree(Node root) {
		if (root == null)
			return;
		SelectTree(root.left);
		System.out.print(root.data + " ");
		SelectTree(root.right);
	}
 
	// 先序遍歷
	public static void SelectTree1(Node root) {
		if (root == null)
			return;
		System.out.print(root.data + " ");
		SelectTree1(root.left);
		SelectTree1(root.right);
	}
 
	// 後序遍歷
	public static void SelectTree2(Node root) {
		if (root == null)
			return;
		SelectTree2(root.left);
		SelectTree2(root.right);
		System.out.print(root.data + " ");
 
	}
 
	// 葉子數
	public static int leafNum(Node node) {
		if (node != null) {
			if (node.left == null && node.right == null) {
				return 1;
			}
			return leafNum(node.left) + leafNum(node.right);
		}
		return 0;
	}
 
	// 求二叉樹的深度
	public static int deep(Node node) {
		int h1, h2;
		if (node == null) {
			return 0;
		} else {
			h1 = deep(node.left);
			h2 = deep(node.right);
			return (h1 < h2) ? h2 + 1 : h1 + 1;
		}
 
	}
 
	// 層次遍歷
	public static void levelOrder(Node node) {
		if (node == null)
			return;
		Queue<Node> queue = new ArrayDeque<Node>();
		queue.add(node);
		while (!queue.isEmpty()) {
			Node temp = queue.poll();
			System.out.print(temp.data);
			if (temp.left != null)
				queue.add(temp.left);
			if (temp.right != null)
				queue.add(temp.right);
		}
	}
}
 
class Node {
	boolean visited = false;
	int data = 0;
	Node left = null;
	Node right = null;
}