营销型网站建设系统,全国工程信息查询平台,外包网站开发 收费,江苏城乡建设教育网站【LetMeFly】589.N 叉树的前序遍历#xff1a;深度优先搜索(DFS)
力扣题目链接#xff1a;https://leetcode.cn/problems/n-ary-tree-preorder-traversal/
给定一个 n 叉树的根节点 root #xff0c;返回 其节点值的 前序遍历 。
n 叉树 在输入中按层序遍历进行序列化表…【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:vectorint ans;void dfs(Node* root) {if (!root) {return;}ans.push_back(root-val);for (Node* nextNode : root-children) {dfs(nextNode);}}
public:vectorint preorder(Node* root) {dfs(root);return ans;}
};Python
# from typing import Optional, List# # Definition for a Node.
# class Node:
# def __init__(self, valNone, childrenNone):
# self.val val
# self.children childrenclass Solution:def dfs(self, root: Optional[Node]) - None:if not root:returnself.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原创不易转载经作者同意后请附上原文链接哦~ Tisfyhttps://letmefly.blog.csdn.net/article/details/136149332