题目
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树 :
返回其层序遍历:
[
[1],
[3,2,4],
[5,6]
]
说明:
- 树的深度不会超过 1000。
- 树的节点总数不会超过 5000。
代码模板:
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<List<Integer>> levelOrder(Node root) {
}
}
分析
这里的递归的话,确认一个level来作为list.get(level)来操作。循环root.children,level加一去递归填充。
解答
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> result = new ArrayList<>();
if(root == null){
return result;
}
levelFill(root,0,result);
return result;
}
public void levelFill(Node root, int level, List<List<Integer>> result){
if(result.size() < level + 1)
result.add(new ArrayList<Integer>());
result.get(level).add(root.val);
for (Node n : root.children) {
levelFill(n, level + 1, result);
}
}
}