【LetMeFly】589.N 叉树的前序遍历:深度优先搜索(DFS)
力扣题目链接:https://leetcode.cn/problems/n-ary-tree-preorder-traversal/
给定一个 n 叉树的根节点 root
,返回 其节点值的 前序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null
分隔(请参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6] 输出:[1,3,5,6,2,4]
示例 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,6,7,11,14,4,8,12,5,9,13,10]
提示:
- 节点总数在范围
[0, 104]
内 0 <= Node.val <= 104
- n 叉树的高度小于或等于
1000
进阶:递归法很简单,你可以使用迭代法完成此题吗?
方法一:深度优先搜索(DFS)
像正常的深度优先搜索一样,写一个函数来实现递归操作。这个函数接受一个节点作为参数:
首先将这个节点的值加入答案数组中,接着依次递归遍历每一个子节点。
从根节点开始调用这个函数后,最终返回答案数组即可。
- 时间复杂度 O ( N ) O(N) O(N),其中 N N N是节点个数
- 空间复杂度 O ( N ) O(N) O(N)
AC代码
C++
class Solution {
private:
vector<int> ans;
void dfs(Node* root) {
if (!root) {
return;
}
ans.push_back(root->val);
for (Node* nextNode : root->children) {
dfs(nextNode);
}
}
public:
vector<int> preorder(Node* root) {
dfs(root);
return ans;
}
};
Python
# 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 dfs(self, root: Optional['Node']) -> None:
if not root:
return
self.ans.append(root.val)
for nextChild in root.children:
self.dfs(nextChild)
def preorder(self, root: Optional['Node']) -> List[int]:
self.ans = []
self.dfs(root)
return self.ans
同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136149332