1. 程式人生 > >先序遍歷-遞迴和非遞迴(java版)

先序遍歷-遞迴和非遞迴(java版)

用輔助棧就行儲存。

 

import java.util.Stack;

class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}

public class Main {
	//先序遍歷遞迴演算法
	public static void preOrder(TreeNode root) {
		if(root == null)return;
		System.out.print(root.val+" ");
		preOrder(root.left);
		preOrder(root.right);
	}
	//先序遍歷非遞迴演算法
	public static void preOrder2(TreeNode root) {
			if(root==null)return;
			Stack<TreeNode> q =new Stack<TreeNode>();
			q.add(root);
			while(q.isEmpty()==false) {
				TreeNode tn = q.pop();
				System.out.print(tn.val +" ");//Visit(root)
				if(tn.right!=null)q.add(tn.right);//注意是right元素先進棧
				if(tn.left!=null)q.add(tn.left);
			}
	}
	public static void main(String[] args) {
		TreeNode root = new TreeNode(1);
		 root.left = new TreeNode(2);
		 root.right = new TreeNode(3);
		 
		 root.left.left = new TreeNode(4);
		 root.left.right = new TreeNode(5);
		 
		 root.right.left = new TreeNode(6);
		 root.right.right = new TreeNode(7);
		
		 preOrder(root);
	}
}