思路:利用bfs,利用队列将当前层的孩子元素加入队列,再将本层元素出队即可
注意点:res.remove()执行后,ArrayList的元素索引会改变,可以先添加下一层所有元素后,再将本层元素一起出队
code:
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res=new ArrayList<List<Integer>>();
if(root==null)return res;
List<Node> now=new ArrayList<Node>();
now.add(root);
while(now.size()>0){
int num=now.size();
List<Integer> t=new ArrayList<Integer>();
for(int i=0;i<num;i++){//遍历同一层元素
t.add(now.get(i).val);
int cur=now.get(i).children.size();
for(int j=0;j<cur;j++){//遍历每个元素的孩子
if(now.get(i).children.get(j)!=null){
now.add(now.get(i).children.get(j));
}
}
}
for(int i=0;i<num;i++){
now.remove(0);
}
res.add(t);
}
return res;
}
}