【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 <= 104n 叉树的高度小于或等于 1000

 

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

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

像正常的深度优先搜索一样,写一个函数来实现递归操作。这个函数接受一个节点作为参数:

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

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

时间复杂度

O

(

N

)

O(N)

O(N),其中

N

N

N是节点个数空间复杂度

O

(

N

)

O(N)

O(N)

AC代码

C++

class Solution {

private:

vector ans;

void dfs(Node* root) {

if (!root) {

return;

}

ans.push_back(root->val);

for (Node* nextNode : root->children) {

dfs(nextNode);

}

}

public:

vector 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

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。