尝试不用递归,那么就要用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; } }