原题链接在这里:https://leetcode.com/problems/binary-tree-level-order-traversal/
是一道BFS,利用queue,先进先出,并利用curCount来判断是否走完了当前一层。当curCount = 0 时表示当前一层走完,要把当前list加入res里,再刷新list,问题是不要忘记同时刷新curCount和nextCount.
Time O(n), Space O(n).
AC Java:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(root == null){
return res;
}
Queue<TreeNode> que = new LinkedList<TreeNode>();
que.offer(root);
List<Integer> ls = new ArrayList<Integer>();
int curCount = 1;
int nextCount = 0;
while(!que.isEmpty()){
TreeNode tn = que.poll();
ls.add(tn.val);
curCount--;
if(tn.left!=null){
que.offer(tn.left);
nextCount++;
}
if(tn.right!=null){
que.offer(tn.right);
nextCount++;
}
if(curCount == 0){
curCount = nextCount;
nextCount = 0;
res.add(ls);
ls = new ArrayList<Integer>();
}
}
return res;
}
}