【劍指offer】59. 按之字形順序打印二叉樹

問題描述

請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。

思路

可以用一個棧。照樣層序遍歷,只不過在倒着走的層用一個棧保存數字,遍歷完了這層再吐出來。

方法一

class Solution {
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        if(pRoot == null) return res;
        boolean isRight = true; // 表示方向
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(pRoot);
        while(!queue.isEmpty()){
            Queue<TreeNode> next = new LinkedList<>();
            ArrayList<Integer> tmp = new ArrayList<>();
            Stack<Integer> stack = new Stack<>(); // 倒着來, 當然用棧
            while(!queue.isEmpty()){
                if(!isRight){
                    stack.add(queue.peek().val);
                }else{
                    tmp.add(queue.peek().val);
                }
                if(queue.peek() != null && queue.peek().left != null) next.add(queue.peek().left);
                if(queue.peek() != null && queue.peek().right != null) next.add(queue.peek().right);
                queue.poll();
            }
            while(!stack.isEmpty()) tmp.add(stack.pop());
            res.add(tmp);
            isRight = !isRight;
            queue = next;
        }
        return res;
    }
}

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