429. N 叉树的层序遍历
描述:
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6] 输出:[[1],[3,2,4],[5,6]]
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14] 输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
提示:
- 树的高度不会超过
1000
- 树的节点总数在
[0, 10^4]
之间
思路:
算法流程:
1.特例处理: 当根节点为空,则返回空列表 [] 。
2.初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] 。
3.BFS 循环: 当队列 queue 为空时跳出。
4.新建一个临时列表 tmp ,用于存储当前层打印结果。
当前层打印循环: 循环次数为当前层节点数(即队列 queue 长度)。
出队: 队首元素出队,记为 node。
打印: 将 node.val 添加至 tmp 尾部。
添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue 。
将当前层结果 tmp 添加入 res 。
返回值: 返回打印结果列表 res 即可。
代码:
/*
// 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>> ans =new LinkedList<>();if(root == null){return ans;}Queue<Node> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {int size = queue.size();List<Integer> list = new LinkedList<>();while (size-- > 0) {Node node = queue.poll();list.add(node.val);if (node.children != null) {for (Node child: node.children) {queue.offer(child);}}}ans.add(list);}return ans;}
}