当前位置:网站首页>429. N 叉树的层序遍历(两种解法)
429. N 叉树的层序遍历(两种解法)
2022-07-30 05:15:00 【Alex_Drag】
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] 之间
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
第一种解法:使用队列
将一层的节点都存入到队列,然后记录当前长度,一一弹出在这一长度中队列的节点,弹出的节点中,如果有节点的children不为空的,则将该节点的子节点添加到队列中,进行下一层级遍历。
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
Queue<Node> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()) {
int size = queue.size();
List<Integer> cur = new ArrayList<>();
int i = -1;
while (++i < size) {
Node node = queue.poll();
cur.add(node.val);
if (node.children != null) {
queue.addAll(node.children);
}
}
res.add(cur);
}
return res;
}
第二种解法:深度遍历
将当前的层数传入进方法中,如果当前的层数等于res的的长度,代表之前未访问过当前层,创建一个集合,继续递归就可以了。
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
dfs(root, 0, res);
return res;
}
private void dfs(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);
if (node.children != null) {
for(Node next : node.children) {
dfs(next, level + 1, res);
}
}
}
边栏推荐
- NFT 产品设计路线图
- Small program npm package--API Promise
- Seata异常:endpoint format should like ip:port
- C# One Week Introductory "C# - Classes and Objects" Day Six
- Internet (software) company project management software research report
- Nuxt3 learning
- go语言学习笔记二
- 并发编程复习
- 参与开源,让程序员找回热血和激情
- Programmers care guide, give yourself a chance to make the occasional relaxation of body and mind
猜你喜欢
Hexagon_V65_Programmers_Reference_Manual (12)
即刻报名|前沿技术探索:如何让 Spark 更强劲、更灵活
How MySQL to prepare SQL pretreatment (solve the query IN SQL pretreatment can only query out the problem of a record)
VisualStudio2022 local debugging entry is particularly slow problem solving
Internet (software) company project management software research report
pytorch官网中如何选择以及后面的安装和pycharm测试步骤
容器化 | 在 KubeSphere 中部署 MySQL 集群
Kyligence 亮相第五届南方信息大会并获评“CIO 优选数字化服务商”
参与开源,让程序员找回热血和激情
ugly programmer
随机推荐
22-07-29 西安 分布式事务、Seata
Golang——从入门到放弃
Discourse Custom Header Links
go版本升级
DLL说明(1)
MySQL如何对SQL做prepare预处理(解决IN查询SQL预处理仅能查询出一条记录的问题)
C# One Week Introductory "C# - Classes and Objects" Day Six
ThinkPHP高仿蓝奏云网盘系统源码/对接易支付系统程序
L2-020 功夫传人
MySQL安装配置教程(超级详细)
Some understanding of YOLOv7
curl (7) Failed connect to localhost8080; Connection refused
【LeetCode】Day107-除自身以外数组的乘积
Go语学习笔记 - gorm使用 - 事务操作 Web框架Gin(十一)
How can I make (a == 1 && a == 2 && a == 3) to be true?
MySQL夺命10问,你能坚持到第几问?
Nuxt3 learning
LeetCode Algorithm 2326. Spiral Matrix IV
程序员大保健指南,给自己的身心偶尔放松的机会
(Hexagon_V65_Programmers_Reference_Manual(13)