[leetcode]Binary Tree Level Order Traversal

尝试不用递归,那么就要用queue。不用递归就要用多一个queue来保存level。

update:事实上,BFS一般都要用queue的。这道题目也可以用DFS解决,就是在递归的过程中传入每一层的level,那么到达某个level时,就往这个level的数组里放进数据。http://discuss.leetcode.com/questions/49/binary-tree-level-order-traversal

而至于多一个queue,其实也不必,可以记录lastLevel和thisLevel两个数字来做到。

public class Solution {
    public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
        LinkedList<Integer> level = new LinkedList<Integer>();
        if (root == null) return ans;
        queue.offer(root);
        level.offer(1);
        ArrayList<Integer> arr = new ArrayList<Integer>();
        int currentLevel = 1;
        while (queue.size() != 0) {
            TreeNode node = queue.poll();
            int l = level.poll();
            if (l > currentLevel) {
                currentLevel = l;
                ans.add(arr);
                arr = new ArrayList<Integer>();
            }
            if (node != null) {
                arr.add(node.val);
                if (node.left != null) {
                    queue.offer(node.left);
                    level.offer(l+1);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                    level.offer(l+1);
                }
            }

        }
        if (arr.size() != 0) ans.add(arr);
        return ans;
        
    }
}

  

posted @ 2013-08-11 23:36  阿牧遥  阅读(258)  评论(0编辑  收藏  举报