[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;
}
}

浙公网安备 33010602011771号