二叉樹後序遍歷非遞歸實現

二叉樹的先序,中序遍歷的非遞歸遍歷方法比較簡單,只要藉助一個棧就可以很容易實現。但其後序遍歷就有些複雜了,這裏借鑑下面這篇文章中的後序非遞歸遍歷算法。http://blog.csdn.net/xingzhemoluo/article/details/40898233

利用兩個棧來實現後序遍歷,一個棧用於存儲遍歷結果,另一個棧作爲一個輔助棧。

/*二叉樹後序非遞歸遍歷
    * 藉助兩個棧可以用很簡單的方式實現二叉樹的後序非遞歸遍歷
    * */
    public static void postOrder(TreeNode root){

        if (root == null){
            return;
        }
        Stack<TreeNode> stack = new Stack<TreeNode>();
        Stack<TreeNode> output = new Stack<TreeNode>();
        TreeNode p = root;
        while (p != null || !stack.isEmpty()){
            if (p != null){
                stack.push(p);
                output.push(p);
                p = p.right;
            }else{
                p = stack.pop();
                p = p.left;
            }
        }
        while (!output.isEmpty()){
            System.out.println(output.pop().val + " ");
        }
    }
public class TreeNode {

    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int x){
        this.val = x;
    }

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章