难度中等98收藏分享切换为英文关注反馈
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树
:
返回其层序遍历:
[ [1], [3,2,4], [5,6] ]
说明:
- 树的深度不会超过
1000
。 - 树的节点总数不会超过
5000
。
递归解法:
/**
* 429. N叉树的层序遍历
* https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/
*
* @param root
* @return
*/
public List<List<Integer>> levelOrder(Node root) {
if (root == null) {
return Collections.emptyList();
}
List<List<Integer>> res = new ArrayList<>();
List<Node> first = new ArrayList<>();
first.add(root);
adds1(first, res);
return res;
}
private void adds1(List<Node> levelNodes, List<List<Integer>> res) {
if (!levelNodes.isEmpty()) {
List<Integer> levelInt = new ArrayList<>();
List<Node> nextLevelNodes = new ArrayList<>();
for (Node levelNode : levelNodes) {
levelInt.add(levelNode.val);
List<Node> children = levelNode.children;
if (children != null && !children.isEmpty()) {
nextLevelNodes.addAll(children);
}
}
res.add(levelInt);
if (!nextLevelNodes.isEmpty()) {
adds1(nextLevelNodes, res);
}
}
}