题目描述:
给定一个 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]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
---------------------------------------------------------------------------------------------------------------------------------
day19:
今天是一道中等题,涉及到树的知识会比较难写一点,开始一直想通过递归来写,最后发现有点不理想,就换了个思路通过队列来做,看看代码:
public List> levelOrder(Node root) {
if (root == null) {
return new ArrayList>();
}
List> ans = new ArrayList>();
Queue queue = new ArrayDeque();
queue.offer(root);
while (!queue.isEmpty()) {
int cnt = queue.size();
List level = new ArrayList();
for (int i = 0; i < cnt; ++i) {
Node cur = queue.poll();
level.add(cur.val);
for (Node child : cur.children) {
queue.offer(child);
}
}
ans.add(level);
}
return ans;
}
思路解析:
如果root都为空,直接返回空链表,创建一个ans来返回值,创建一个Node队列来存储值,先把root存放入队列(用offer防止异常),每次循环通过cnt来存队列的值,当队列空了时退出,因为ans是list嵌套list,所以创建一个临时列表level,来存储每一层的值,通过cnt循环每层的个数,把当前层的val存入level中,然后把children存入队列中(把下一层存入到队列中),遍历完后就得到ans结果了