力扣145 二叉树的后序遍历 Java版本

文章目录

  • 题目描述
  • 递归解法
    • 代码
  • 非递归解法
    • 思路
    • 代码


题目描述

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

示例 1:
在这里插入图片描述

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

输入:root = []
输出:[]
示例 3:

输入:root = [1]
输出:[1]

提示:

树中节点的数目在范围 [0, 100] 内
-100 <= Node.val <= 100

进阶:递归算法很简单,你可以通过迭代算法完成吗?

递归解法

代码

class Solution {//使用递归的方法public List<Integer> postorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();postorder(root,result);return  result;}public void postorder(TreeNode root,List<Integer> result){//递归出口if(root==null){return;}if (root.left!=null){postorder(root.left,result);}if(root.right!=null){postorder(root.right,result);}result.add(root.val);}}

非递归解法

思路

在代码中详细注释了

代码

class Solution {//使用非递归的方法public List<Integer> postorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();postorder(root,result);return  result;}//非递归方式的后续遍历也需要利用栈来实现//遍历的方式是:左->右->中。//要是单纯的按照这个顺序进行遍历的话是比较麻烦的,所以可以考虑利用前序遍历的方法改造然后再反转。//前序遍历:中->左->右。我们改造为:中->右->左。然后将结果反转,结果就变成了:左->右->中public void postorder(TreeNode root,List<Integer> result){if(root==null){return;}//用栈来保存节点Stack<TreeNode> stack = new Stack<>();stack.push(root);//当栈不空的时候从栈中弹出一个节点,然后遍历该节点,然后再将孩子节点入栈//注意这里要让左孩子先入栈,右孩子再入栈,这样就会先弹出右孩子,也就会按照我们上边改造的顺序遍历:中->右->左while (!stack.isEmpty()) {TreeNode node = stack.pop();result.add(node.val);if (node.left != null) {stack.push(node.left);}if (node.right != null) {stack.push(node.right);}}//反转遍历的结果Collections.reverse(result);}}

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

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

相关文章

设计模式(六):模板方法模式(行为型模式)

Template Method&#xff0c;模板方法&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一 些步骤延迟到子类中&#xff0c;TemplateMethod使得子类可以不改变一个算法的结构即 可以重定义该算法得某些特定步骤。 举例说明 奶茶制作过程&#xff0c;第一步加牛奶&…

计算机就业初调研

对于一个本科生而言&#xff0c;早早就收获了保研资格&#xff0c;那么摆在眼前的就是是否要放弃保研机会&#xff1f;不过看到当今计算机的就业情况&#xff0c;加上本科学历的贬值&#xff0c;想要放弃到手的保研机会&#xff0c;既有些不合理&#xff0c;也有些心疼&#xf…

Linux【动静态库】

目录 1.软硬链接 1.1软硬链接的语法 1.2理解软硬链接 1.3目录文件的硬链接 1.4应用场景 1.5ACM时间 2.动静态库 2.1认识库 3.制作静态库 3.1静态库打包 3.2静态库的使用 4.制作动态库 4.1动态库打包 4.2动态库的链接使用 4.3动态库的链接原理 总结&#xff1…

论文阅读-基于动态权重的一致性哈希微服务负载均衡优化

论文名称&#xff1a;基于动态权重的一致性哈希微服务负载均衡优化 摘要 随着互联网技术的发展&#xff0c;互联网服务器集群的负载能力正面临前所未有的挑战。在这样的背景下&#xff0c;实现合理的负载均衡策略变得尤为重要。为了达到最佳的效率&#xff0c;可以利用一致性…

Dell PowerEdge服务器的iDRAC修复方法与步骤

最近老旧的Dell PowerEdge R720xd服务器罢工了&#xff0c;经检查发现是iDRAC电脑坏了。 iDRAC是戴尔服务器系列中的一种远程管理功能&#xff0c;它允许用户通过网络远程监控和管理戴尔服务器&#xff0c;即使在服务器关机或操作系统崩溃的情况下也可以进行远程管理。主要包括…

【Crypto | CTF】RSA打法 集合

天命&#xff1a;我发现题题不一样&#xff0c;已知跟求知的需求都不一样 题目一&#xff1a;已知 p q E &#xff0c;计算T&#xff0c;最后求D 已知两个质数p q 和 公钥E &#xff0c;通过p和q计算出欧拉函数T&#xff0c;最后求私钥D 【密码学 | CTF】BUUCTF RSA-CSDN…

【数据结构】每天五分钟,快速入门数据结构(一)——数组

目录 一.初始化语法 二.特点 三.数组中的元素默认值 四.时间复杂度 五.Java中的ArrayList类 可变长度数组 1 使用 2 注意事项 3 实现原理 4 ArrayList源码 5 ArrayList方法 一.初始化语法 // 数组动态初始化&#xff08;先定义数组&#xff0c;指定数组长度&#xf…

AUTOSAR CP--chapter7从CAN网络学习Autosar通信

从CAN网络学习Autosar通信 前言缩写词CAN通信在AUTOSAR架构中的传输上位机配置 第六章总结&#xff1a;学习了如何使用工具的自动配置功能&#xff0c;位我们生成系统描述中部分ecu的BSW模块配置&#xff0c;但是自动配置的功能虽然为我们提供了极大的便利&#xff0c;我们仍然…

rtt的io设备框架面向对象学习-软件模拟rtc设备

目录 1.软件rtc设备实现类2.软件rtc设备类的子类3.初始化/构造流程3.1 设备驱动框架层3.3 设备io管理层 4.总结5.使用 硬件rtc和软件rtc设备是互斥的。因为它们的名字都叫"rtc"&#xff0c;在对象容器中不允许重名。 软件rtc设备比较特殊&#xff0c;不依赖于任何硬件…

专145+总420+哈尔滨工业大学803信号与系统和数字逻辑电路考研经验哈工大电子信息与通信,真题,大纲,参考书。

自从高考失利没有考入哈工大&#xff0c;一直带着遗憾&#xff0c;今年初试专业课803信号与系统和数字逻辑电路145&#xff0c;总分420顺利圆满哈工大&#xff0c;了却了一块心病&#xff0c;回看这一年的复习起起落落&#xff0c;心中的那块初心&#xff0c;让我坚持到了上岸&…

算法通关村-----继续看回溯问题

复原IP地址 问题描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.…

ElasticSearch之Index Template 和Dynamic Template

写在前面 在ElasticSearch之Mapping 一文中我们一起看了es的dynamic mapping机制&#xff0c;通过该机制允许我们不需要显式的定义mapping信息&#xff0c;而是es根据插入的文档值来自动生成 &#xff0c;比如插入如下的文档&#xff1a; {"firstName": "Chan…

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

前言 Vue 是前端开发中非常常见的一种框架&#xff0c;它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中&#xff0c;组件的开发也变得非常简单&#xff0c;但随着 Vue3 版本的发布&#xff0c;组件开发有了更多的特性和优化&#xff0c;为我们的业务开发带…

css pointer-events 多层鼠标点击事件

threejs 无法滑动视角&#xff0c;菜单界面覆盖threejs操作事件。 pointer-events /* Keyword values */ pointer-events: auto; pointer-events: none; pointer-events: visiblePainted; /* SVG only */ pointer-events: visibleFill; /* SVG only */ pointer-events: visib…

Python中HTTP请求的基本方法:穿越网络的魔法咒语

在网络世界中&#xff0c;HTTP请求就像是对服务器的“魔法咒语”&#xff0c;它能让我们的Python程序与远方的服务器进行沟通&#xff0c;获取或发送数据。今天&#xff0c;我们就来聊聊Python中HTTP请求的基本方法&#xff0c;看看这些“咒语”是如何施展的。 首先&#xff0…

力扣爆刷第74天--动态规划01背包

力扣爆刷第74天–动态规划 文章目录 力扣爆刷第74天--动态规划一、494.目标和二、474.一和零 一、494.目标和 题目链接&#xff1a;https://leetcode.cn/problems/target-sum/description/ 思路&#xff1a;求目标和的组合数&#xff0c;把物品里的元素分为左右两堆&#xff0…

java数据结构与算法刷题-----LeetCode155. 最小栈

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 1. 法一&#xff1a;使用辅助最小栈 解题思路&#xff1a;时间复杂度O(1)…

自己怎么做小程序?如何通过小程序赚钱?如何确保产品有竞争力?

引言 随着科技的迅速发展&#xff0c;小程序已经成为创业者们进军电商领域的一种重要途径。在这个数字时代&#xff0c;通过小程序卖东西已经成为一种便捷而高效的商业模式。本文将为您解析自己如何通过小程序销售商品&#xff0c;并实现盈利的关键步骤。无论您是初入创业圈的…

ClickHouse 基础(一)

官网 以毫秒为单位查询数十亿行 ClickHouse是用于实时应用和分析的最快、资源效率最高的开源数据库。 安装ClickHouse 使用ClickHouse&#xff0c;你有三个选择: ClickHouse云:官方ClickHouse作为一项服务&#xff0c;-由ClickHouse的创建者构建&#xff0c;维护和支持快速安…

【软件设计模式之适配器模式】

文章目录 前言一、适配器模式概述1.定义与目的2.使用场景系统升级与集成接口不一致问题的解决兼容旧版本API多种数据源处理 二、适配器模式的结构1.主要组件适配器&#xff08;Adapter&#xff09;目标接口&#xff08;Target Interface&#xff09;被适配者&#xff08;Adapte…