题目:
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树 :
返回其层序遍历:
[
[1],
[3,2,4],
[5,6]
]
说明:
树的深度不会超过 1000。
树的节点总数不会超过 5000。
方法一:
思路:用队列实现,把每一层的Node压入队列。
时间:10ms
代码:
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> list=new ArrayList<>();
if(root==null)return list;
Queue<Node> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int len=queue.size();
List<Integer> temp=new ArrayList<>();
for(int i=0;i<len;i++){
Node node=queue.remove();
if(node.children.size()!=0){
for(Node k:node.children){
queue.add(k);
}
}
temp.add(node.val);
}
list.add(temp);
}
return list;
}
方法二(leetcode优解)
思路:递归
时间: 4ms
代码:
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
helper(root, 0, res);
return res;
}
private void helper(Node node, int level, List<List<Integer>> res) {
if (node == null)
return;
if (res.size() == level)
res.add(new ArrayList<>());
res.get(level).add(node.val);
for (Node child : node.children)
helper(child, level + 1, res);
}