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

系列文章:

相关题目:
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.hqwc.cn/news/128820.html

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

相关文章

LeetCode 1251. 平均售价

题目链接:1251. 平均售价 题目描述 表:Prices Column NameTypeproduct_idintstart_datedateend_datedatepriceint (product_id,start_date,end_date) 是 prices 表的主键(具有唯一值的列的组合)。 price…

【排序算法】插入排序

文章目录 一:基本概念1.1 介绍1.2 原理1.3 插入排序法思想 二:代码实现2.1 源码2.2 执行结果2.3 测试八万条数据 三:算法分析3.1 时间复杂度3.2 空间复杂度3.3 稳定性 一:基本概念 1.1 介绍 插入式排序属于内部排序法&#xff0…

项目设计:YOLOv5目标检测+机构光相机(intel d455和d435i)测距

1.介绍 1.1 Intel D455 Intel D455 是一款基于结构光(Structured Light)技术的深度相机。 与ToF相机不同,结构光相机使用另一种方法来获取物体的深度信息。它通过投射可视光谱中的红外结构光图案,然后从被拍摄物体表面反射回来…

【框架风格】解释器模式

1、描述 解释器框架风格(Interpreter Framework Style)是一种软件架构风格,其核心思想是构建一个解释器(Interpreter)来解释并执行特定领域或问题领域的语言或规则。以下是解释器框架风格的一些特点: 1. 领…

flink自定义窗口分配器

背景 我们知道处理常用的滑动窗口分配器,滚动窗口分配器,全局窗口分配器,会话窗口分配器外,我们可以实现自己的自定义窗口分配器,以实现我们的自己的窗口逻辑 自定义窗口分配器的实现 package wikiedits.assigner;i…

Kaadas凯迪仕助力亚运盛会,尽展品牌硬核科技与智能锁行业风采

9月23日至10月8日,亚洲最大规模体育赛事亚运会在杭州举办。作为国际性体育赛事,除赛中的各类竞赛项目外,杭州亚运会前后相关活动也吸引了大众目光的聚焦。 Kaadas凯迪仕智能锁作为此次杭州亚运会官方指定智能门锁,以#凯迪仕守护每…

C++ 01.学习C++的意义-狄泰软件学院

一些历史 UNIX操作系统诞生之初是用汇编语言编写的随着UNIX系统的发展,汇编语言的开发效率成为瓶颈,所以需要一个新的语言替代汇编语言1971年通过对B语言改良,使其能直接产生机器代码,C语言诞生UNIX使用C语言重写,同时…

一文熟练使用python修改Excel中的数据

使用python修改Excel中的内容 1.初级修改 1.1 openpyxl库的功能: openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,例如Xlwings。openpyxl是一个比较综合的工具,能…

WEEX编译|加密市场三季度回顾及未来展望

作者:Greg Cipolaro,NYDIG 全球研究主管 编译:WEEX 唯客交易所 本文要点: ● 在充满挑战的第三季度,比特币价格下跌 11.1%,因为众多资产类别都在努力应对利率上升的影响和对经济衰退的担忧。 ● 比特币…

什么是轴电流?轴电流对轴承有什么危害?

根据同步发电机结构及工作原理,由于定子铁芯组合缝、定子硅钢片接缝,定子与转子空气间隙不均匀,轴中心与磁场中心不一致等,机组的主轴不可避免地要在一个不完全对称的磁场中旋转。这样,在轴两端就会产生一个交流电压。…

【机器学习 | 回归问题】超越直线:释放多项式回归的潜力 —— 详解线性回归与非线性 (含详细案例、源码)

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

如何在抖音做到种收合一?「星推搜直」新路径激发生意增量

数字化时代,复杂无序的媒介信息触点,让消费者的购买决策和心智建设路径,从“认知-认同-认购”的线性漏斗式逐渐发展为跳跃式、多线并进,种草到转化的路径上充满各种可能。与此同时,在抖音,从通过短视频、直…