[leetcode]Binary Tree Zigzag Level Order Traversal

树的BFS的简单变种。

public class Solution {
    public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
        ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
        if (root == null) return ans;
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);
        int lastLevel = 1;
        int thisLevel = 0;
        boolean direction = true;
        
        ArrayList<Integer> row = new ArrayList<Integer>();
        while (queue.size() != 0)
        {
            TreeNode n = queue.poll();
            lastLevel--;
            if (n.left != null)
            {
                queue.offer(n.left);
                thisLevel++;
            }
            if (n.right != null)
            {
                queue.offer(n.right);
                thisLevel++;
            }
            row.add(n.val);
            if (lastLevel == 0)
            {
                lastLevel = thisLevel;
                thisLevel = 0;
                if (!direction)
                {
                    // reverse
                    int len = row.size();
                    for (int i = 0; i < len/2; i++)
                    {
                        int tmp = row.get(i);
                        row.set(i, row.get(len-1-i));
                        row.set(len-1-i, tmp);
                    }
                }
                direction = !direction;
                ans.add(row);
                row = new ArrayList<Integer>();
            }
        }
        return ans;
    }
}

  

posted @ 2013-09-17 21:36  阿牧遥  阅读(159)  评论(0编辑  收藏  举报