22-树-二叉树的后序遍历

这是树的第22篇算法,力扣链接。

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 

示例 1:

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

我们来回忆一下后续遍历逻辑:

后序遍历 (Postorder Traversal)

后序遍历的顺序是:

  1. 遍历左子树
  2. 遍历右子树
  3. 访问根节点

后序遍历常用于删除或释放树中的节点。因为你在删除节点之前先访问其子节点,这样可以安全地删除每个节点。

 例子

假设有一棵二叉树如下:

    A/ \B   C/ \   \
D   E   F
  • 后序遍历D, E, B, F, C, A。首先是左子树(D, E, B),然后是右子树(F, C),最后是根节点(A)。

 后续遍历会优先去到最左节点,然后一点一点往回走。

func postorderTraversal(root *TreeNode) []int {var result []intif root == nil {return result}var (stack []*TreeNodeprev  *TreeNode)for root != nil || len(stack) > 0 {for root != nil {stack = append(stack, root)root = root.Left}node := stack[len(stack)-1]if node.Right == nil || node.Right == prev {result = append(result, node.Val)prev = nodestack = stack[:len(stack)-1]} else {root = node.Right}}return result
}

递归写法:

func postorderTraversal(root *TreeNode) []int {var result []intvar postorder func(*TreeNode)postorder = func(node *TreeNode) {if node == nil {return}postorder(node.Left)postorder(node.Right)result = append(result, node.Val)}postorder(root)return result
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/485629.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么选择OV证书以及如何申请?

在信息化高度发达的今天,对于企业而言,在线交易、数据传输的安全性直接影响到品牌形象和用户信任度。在这个背景下,SSL/TLS证书中的组织验证(Organization Validated,简称OV)证书因其独特的安全性和权威性&…

QT中调用python

一.概述 1.Python功能强大,很多Qt或者c/c开发不方便的功能可以由Python编码开发,尤其是一些算法库的应用上,然后Qt调用Python。 2.在Qt调用Python的过程中,必须要安装python环境,并且Qt Creator中编译器与Python的版…

如何理解跨境ERP定制中的技术要点与挑战?

在跨境电商领域日益竞争激烈的今天,企业需要依靠先进的ERP系统来实现信息管理、数据整合和业务流程优化。而针对不同国家和地区的特殊需求,跨境ERP定制越来越成为企业必须面对的挑战。本文将深入探讨跨境ERP定制中的技术要点与挑战,帮助企业更…

缓存篇—缓存雪崩

什么是缓存雪崩 通常我们为了保证缓存中的数据与数据库中的数据一致性,会给 Redis 里的数据设置过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成缓存,因此就会访问数据库,并…

windows如何恢复删除文件?「2024恢复策略」

在数字时代,数据无疑是最为宝贵的财富之一。然而,无论是因为误操作、病毒感染还是其他各种原因,我们时常会面临文件被误删的风险。当重要的文件从Windows系统中消失时,许多用户都会感到焦虑和无助。那么,Windows系统下…

CSS 面试题汇总

CSS 面试题汇总 1. 介绍下 BFC 及其应 参考答案: 参考答案: 所谓 BFC,指的是一个独立的布局环境,BFC 内部的元素布局与外部互不影响。 触发 BFC 的方式有很多,常见的有: 设置浮动overflow 设置为 auto、scr…

SWIFT:自我认知微调

文档:https://github.com/modelscope/swift/blob/main/docs/source/LLM/%E8%87%AA%E6%88%91%E8%AE%A4%E7%9F%A5%E5%BE%AE%E8%B0%83%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.md ​​​​​​代码: Swift是如何把自我认知数据集融合到训练集中呢? 1:相关的3个参数

【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、Java…

【深度学习目标检测】十八、基于深度学习的人脸检测系统-含GUI和源码(python,yolov8)

人脸检测是计算机视觉中的一个重要方向,也是一个和人们生活息息相关的研究方向,因为人脸是人最重要的外貌特征。人脸检测技术的重要性主要体现在以下几个方面: 人脸识别与安全:人脸检测是人脸识别系统的一个关键部分,是…

【了解机器学习的定义与发展历程】

曾梦想执剑走天涯,我是程序猿【AK】 目录 简述概要知识图谱 简述概要 了解机器学习的定义与发展历程 知识图谱 机器学习(Machine Learning,ML)是一门跨学科的学科,它使用计算机模拟或实现人类学习行为,通…

我们在SqlSugar开发框架中,用到的一些设计模式

我们在《SqlSugar开发框架》中,有时候都会根据一些需要引入一些设计模式,主要的目的是为了解决问题提供便利和代码重用等目的。而不是为用而用,我们的目的是解决问题,并在一定的场景下以水到渠成的方式处理。不过引入任何的设计模…

隐藏饿了么el-select组件的el-select-dropdown部分,只使用el-select的显示框

隐藏饿了么el-select组件的el-select-dropdown部分,只使用el-select的显示框 问题: 由于el-select组件的el-select-dropdown部分是自动插入在最外层Body上的,所以在当前组件的scoped中让el-select-dropdown组件display:none不会生效所以需要: :popper-…