590.N 叉树的后序遍历

【LetMeFly】590.N 叉树的后序遍历:深度优先搜索(DFS)

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

给定一个 n 叉树的根节点 root ,返回 其节点值的 后序遍历

n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。

 

示例 1:

输入:root = [1,null,3,2,4,null,5,6]
输出:[5,6,3,2,4,1]

示例 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]
输出:[2,6,14,11,7,3,12,8,4,13,9,10,5,1]

 

提示:

  • 节点总数在范围 [0, 104]
  • 0 <= Node.val <= 104
  • n 叉树的高度小于或等于 1000

 

进阶:递归法很简单,你可以使用迭代法完成此题吗?

方法一:深度优先搜索(DFS)

类似于N叉树的前序遍历,像正常的深度优先搜索一样,写一个函数来实现递归操作。这个函数接受一个节点作为参数:

首先依次递归遍历每一个子节点,接着将这个节点的值加入答案数组中。

从根节点开始调用这个函数后,最终返回答案数组即可。

  • 时间复杂度$O(N)$,其中$N$是节点个数
  • 空间复杂度$O(N)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
private:
vector<int> ans;

void dfs(Node* root) {
for (Node* nextNode : root->children) {
dfs(nextNode);
}
ans.push_back(root->val);
}
public:
vector<int> postorder(Node* root) {
if (root) {
dfs(root);
}
return ans;
}
};

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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 dfs(self, root: 'Node') -> None:
for nextNode in root.children:
self.dfs(nextNode)
self.ans.append(root.val)

def postorder(self, root: Optional['Node']) -> List[int]:
self.ans = []
if root:
self.dfs(root)
return self.ans

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


590.N 叉树的后序遍历
https://blog.letmefly.xyz/2024/02/19/LeetCode 0590.N叉树的后序遍历/
作者
Tisfy
发布于
2024年2月19日
许可协议