LeetCode 0590. N 叉树的后序遍历:深度优先搜索(DFS)

news/2024/7/20 21:30:24 标签: 深度优先, leetcode, , 后序遍历, 题解

【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 ) 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) {
        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
# 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


http://www.niftyadmin.cn/n/5385284.html

相关文章

OpenCV统计函数之minMaxLoc和meanStdDev

在OpenCV中&#xff0c;minMaxLoc和meanStdDev是两个用于统计图像或数组中元素的基本特性的函数。这些统计函数对于图像处理、特征提取和数据分析非常有用。 minMaxLoc minMaxLoc函数用于查找数组或图像中的最小值和最大值&#xff0c;并可选地返回这些值的位置。这在处理图像…

ABCDE联合创始人BMAN确认出席Hack .Summit() 2024香港Web3盛会

ABCDE联合创始人和普通合伙人BMAN确认出席Hack .Summit() 2024&#xff01; ABCDE联合创始人和普通合伙人BMAN确认出席由 Hack VC 主办&#xff0c;并由 AltLayer 和 Berachain 联合主办&#xff0c;与 SNZ 和数码港合作&#xff0c;由 Techub News 承办的Hack.Summit() 2024区…

Deep Layer Aggregation(CVPR 2018)原理与代码解析

paper&#xff1a;Deep Layer Aggregation official implementation&#xff1a;https://github.com/ucbdrive/dla third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/dla.py 本文的创新点 骨干网络的设计…

Android无法获取已安装应用包名的问题

前言 在某些情况下&#xff0c;我们需要获取android上已安装的第三方应用的一些信息 检索 private boolean isAppInstalled(Context context, String pkgName) {if (pkgName null || pkgName.isEmpty()) {return false;}PackageInfo packageInfo;try {packageInfo context…

LeetCode23.合并K个升序链表

题目 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 &#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&#xff1a;链表数组如下&…

【前端】前端三要素之JavsScript基础

写在前面&#xff1a;本文仅包含JavaScript内容&#xff0c;DOM知识传送门在这里&#xff0c;BOM传送门在这里。 本文内容是假期中刷的黑马Pink老师视频&#xff08;十分感谢Pink老师&#xff09;&#xff0c;原文保存在个人的GitLab中&#xff0c;如果需要写的网页内容信息等可…

uniapp运动课程健身打卡系统微信小程序

考虑到实际生活中在我来运动管理方面的需要以及对该系统认真的分析,将系统分为小程序端模块和后台管理员模块&#xff0c;权限按管理员和用户这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;首页、个人中心、用户管理、课程类别管理…

2.20数据结构与算法学习日记(二叉树第一部分)

1.树的表示 typedef int DadaType; struct Node{struct Node* firstChild;struct Node* pnextBrotherDataType data; };//树的表示 2.二叉树的简介 二叉树是一种树形数据结构&#xff0c;每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。二叉树具有以下特…