429.N 叉树的层序遍历

【LetMeFly】429.N 叉树的层序遍历:广度优先搜索(BFS)

力扣题目链接:https://leetcode.cn/problems/n-ary-tree-level-order-traversal/

给定一个 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] 之间

方法一:广度优先搜索(BFS)

和之前二叉树的广度优先搜索一样,我们可以使用一个队列来存放每一层的节点,再让这些节点依次出队,并将节点的孩子们(如有)入队。

  • 时间复杂度$O(N)$,其中$N$是节点个数
  • 空间复杂度$O(N2)$,其中$N2$是节点最多的一层的节点数

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> ans;
queue<Node*> q;
if (root) {
q.push(root);
}
while (q.size()) {
ans.push_back({});
for (int _ = q.size(); _ > 0; _--) {
Node* thisNode = q.front();
q.pop();
ans.back().push_back(thisNode->val);
for (Node* nextNode : thisNode->children) {
q.push(nextNode);
}
}
}
return ans;
}
};

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# from typing import List, Optional

# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children

class Solution:
def levelOrder(self, root: Optional[Node]) -> List[List[int]]:
ans = []
q = []
if root:
q.append(root)
while q:
ans.append([])
for _ in range(len(q)):
thisNode = q[0]
q = q[1:]
ans[-1].append(thisNode.val)
for nextNode in thisNode.children:
q.append(nextNode)
return ans

针对于Python的语法糖,若使用两个数组可以很大程度上减少代码量(甚至提高效率):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# from typing import Optional, List

# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children

class Solution:
def levelOrder(self, root: Optional[Node]) -> List[List[int]]:
ans = []
a = []
if root:
a.append(root)
while a:
ans.append([thisNode.val for thisNode in a])
a = [nextChild for thisNode in a for nextChild in thisNode.children]
return ans

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136136336


429.N 叉树的层序遍历
https://blog.letmefly.xyz/2024/02/17/LeetCode 0429.N叉树的层序遍历/
作者
Tisfy
发布于
2024年2月17日
许可协议