一文搞懂二叉树中序遍历的三种方法

系列文章:

相关题目:
94. 二叉树的中序遍历

在这里插入图片描述
中序遍历结果为:4 2 5 1 6 3 7

总体上分为两种框架,递归框架和非递归框架,递归框架又分为两种思路:分解思路和遍历思路。

  • 递归
    1、分解思路 【分解为子问题】
    2、遍历思路 【更新外部变量】
  • 非递归
    3、借助栈

下面代码对三种方法逐一实现。


class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass InorderTraversal:"""94. 二叉树的中序遍历https://leetcode.cn/problems/binary-tree-inorder-traversal/"""def solution1(self, root):"""中序遍历:type root: TreeNode:rtype: List[int]"""if not root:return []return self.solution1(root.left) + [root.val] + self.solution1(root.right)def solution1_1(self, root):"""分解思路,同上:param root::return:"""res = []if not root:return []res.extend(self.solution1_1(root.left))res.append(root.val)res.extend(self.solution1_1(root.right))return resdef solution2(self, root):"""遍历思路,一般需要借助递归函数,递归函数没有返回值,靠更新外部变量得到结果:param root::return:"""self.res = []self.traverse(root)return self.resdef traverse(self, node):if not node:returnself.traverse(node.left)self.res.append(node.val)self.traverse(node.right)def solution3(self, root):"""非递归思路,借助栈 实现:param root::return:"""res = []if not root:return reselse:stk = []while stk or root:if root:stk.append(root)root = root.leftelse:root = stk.pop()res.append(root.val)root = root.rightreturn res

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

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

相关文章

PyTorch Lightning - LightningModule 训练逻辑 (training_step) 异常处理 try-except

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/133673820 在使用 LightningModule 框架训练模型时,因数据导致的训练错误,严重影响训练稳定性,因此需要使用 t…

强化学习实践(三)基于gym搭建自己的环境

目录 前言 1.搭建环境 前言 1.1构建自己的环境文件 1.2 __init __ 1.3 seed 1.4 step 1.5 reset 1.6 render 1.7 close 2.调用环境 2.1 注册 2.2 放入库中 2.3 测试 参考文献 前言 为了减少训练成本,必须搭建合适的训练环境(仿真环境&#…

聊聊僵尸进程

文章目录 1. 前言1.1 什么是僵尸进程1.2 为什么需要关注僵尸进程 2. 僵尸进程的产生2.2 为什么会产生僵尸进程2.3 举个栗子 3. 僵尸进程的影响3.1 僵尸进程为何会占用系统资源3.2 操作系统如何知道哪个资源需要被释放3.3 什么是进程表3.4 什么是PCB 5. 如何处理僵尸进程4.1 识别…

docker安装Jenkins完整教程

1.docker拉取 Jenkins镜像并启动容器 新版本的Jenkins依赖于JDK11 我们选择docker中jdk11版本的镜像 # 拉取镜像 docker pull jenkins/jenkins:2.346.3-2-lts-jdk11 2.宿主机上创建文件夹 # 创建Jenkins目录文件夹 mkdir -p /data/jenkins_home # 设置权限 chmod 777 -R /dat…

vue解决:Parsing error: No Babel config file detected for ....

报错信息 Parsing error: No Babel config file detected for C:\Users\Admin\Desktop\shabi\work\src\App.vue. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. 分析错误:没有检测…

2578. 最小和分割

给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足: num1 和 num2 直接连起来,得到 num 各数位的一个排列。 换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。 num…

Linux手记

常用的配置文件 文件作用/etc/profile系统级别的shell配置文件,它包含了系统中所有用户的默认环境变量和系统级别的全局配置信息/etc/apt/apt.conf配置APT(Advanced Package Tool)软件包管理器的行为,包括代理等/etc/apt/sources…

jmeter利用自身代理录制脚本

在利用代理录制脚本时一定要安装java jdk,不然不能录制的。 没有安装过java jdk安装jmeter后打开时会提示安装jdk,但是mac系统中直接打开提示安装jdk页面后下载的java并不是jdk(windows中没有试验过,笔者所说的基本全部指的是在ma…

Linux从时间服务器同步时间

一、基本设定 自己的时间服务器:111.11.11.111 二、操作 查看当前时间命令:date,发现时间不一致。 同步命令:/usr/sbin/ntpdate 111.11.11.111 然后等待同步完成即可。 如果同步命令不可用,需要先安装Ntp服务&…

Qt事件机制

1.事件 Qt是用来开发基于窗口的程序,我们使用的基于窗口的应用程序都是基于事件,其主要的目的是回调(只有这样程序的效率才是最高的),所以在Qt内部为我们提供了一系列事件处理机制,当窗口事件产生后,事件会经过:事件派发-> 事件过滤->事件分发->事件处理 几个…

Can Large Language Models Understand Real-World Complex Instructions?

本文是LLM系列文章,针对《Can Large Language Models Understand Real-World Complex Instructions?》的翻译。 大型语言模型能理解现实世界的复杂指令吗? 摘要引言相关工作CELLO基准实验结论 摘要 大型语言模型(llm)可以理解人类指令,显示出它们在传…

70. 爬楼梯

70. 爬楼梯 原题 class Solution {public int climbStairs(int n) {if(n0||n1){return n;}//确定dp数组int[] dp new int[n1];//dp数组初始化dp[0]1;dp[1]1;//确定状态转移方程&#xff0c;进行遍历赋值for(int i2;i<n1;i){dp[i]dp[i-1]dp[i-2];}//返回结果return dp[n];…

智慧用电安全云监控系统

近年来&#xff0c;我国电气火灾频发&#xff0c;2017年至2019年&#xff0c;我国共之间发生发展电气控制火灾31.1万起&#xff0c;占全国进行火灾总量及伤亡风险损失的30&#xff05;以上&#xff0c;2019年全年共接报火灾23.3万起&#xff0c;电气火灾11.1万&#xff0c;占52…

2024眼博会/北京眼健康展/中国眼科医学展/近视矫正展

——2024第6届中国&#xff08;北京&#xff09;国际青少年眼健康产业展览会The 2024 sixth China (Beijing) International Youth eye health industry exhibition&#xff0c;将于2024年4月10-12日&#xff0c;在北京亦创国际会展中心盛大举办。主题&#xff1a;呵护好孩子的…

c++ 变量、常量、基本数据类型

文章目录 变量标识符作用域常量基本数据类型整型无符号字符类型bool类型浮点类型字面值赋值时自动类型转换 变量 变量的数据类型 int 数据类型 变量名;#include<iostream> using namespace std;int main() {// 定义变量int a 1, b;b 10;cout << "a "…

mysql 物理备份及恢复

一、物理复制的基本概念 物理备份:直接复制数据库文件&#xff0c;适用于大型的数据库环境&#xff0c;不受存储引擎的限制&#xff0c;但不能恢复到不同的mysql版本 完整备份&#xff1a;也叫完全备份&#xff0c;每次将所有数据&#xff08;不管自第一次备份有没有修改过&…

JS-树:二叉树前序遍历(先序遍历)

文章目录 前言一、前序遍历-递归二、前序遍历-队列总结 前言 最近总结一下树的算法&#xff0c;研究树相关的知识。 一、前序遍历-递归 1、从根出发&#xff0c;然后左边然后右边 2、如下输入是&#xff1a;a b d e c f g // 前序遍历const tree {val: a,left: {val: b,left…

CMIP6数据处理及在气候变化、水文、生态等领域中的实践技术

全球气候模型&#xff08;Global Climate Model, GCM&#xff09;&#xff0c;亦称全球环流模型或全球大气模型&#xff0c;是一种数值模型&#xff0c;被广泛用于模拟地球的气候系统。GCM利用一系列的数学公式来描绘气候系统的各个主要组成部分&#xff0c;包括大气、海洋、冻…

Java spring boot 一次调用多个请求

Java Spring Boot是一种基于Java编程语言的开发框架&#xff0c;它提供了一种快速构建高效、可伸缩和易于维护的企业级应用程序的方式。在实际的应用开发中&#xff0c;我们常常需要调用多个独立的请求来完成某个业务功能。然而&#xff0c;传统的同步方式一次只能调用一个请求…

STM32实战项目——WIFI远程开关灯

前言 其实WIFI开关灯在几个月前就想做了&#xff0c;但是对于没有云平台调试经验的我&#xff0c;一开始有些摸不着头脑&#xff0c;所以就搁置了。十一假期与老同学聊天时了解到他也在做一个远程开关灯的小项目&#xff0c;所以就重新开始了WIFI远程开关灯的小项目。 本文使用…