当前位置: 首页 > news >正文

【LeetCode刷题】二叉树的中序遍历

给定一个二叉树的根节点root,返回它的中序遍历

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

递归解法

利用递归的 “左→根→右” 顺序遍历,是中序遍历的直观实现。

Python代码

from typing import Optional, List class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class Solution: def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] # 递归辅助函数:实现中序遍历「左→根→右」的核心逻辑 def traverse(node: Optional[TreeNode]): if node: # 节点非空时才遍历,递归终止条件:node is None traverse(node.left) # 第一步:遍历左子树 result.append(node.val) # 第二步:访问当前根节点 traverse(node.right) # 第三步:遍历右子树 traverse(root) # 从根节点开始递归遍历 return result if __name__ == "__main__": # 实例化解题类 sol = Solution() # 示例1:构建树 [1,null,2,3] → 输出 [1,3,2] root1 = TreeNode(1) root1.right = TreeNode(2) root1.right.left = TreeNode(3) print("示例1输出:", sol.inorderTraversal(root1)) print("预期结果:", [1, 3, 2]) print("-" * 30) # 示例2:构建空树 [] → 输出 [] root2 = None print("示例2输出:", sol.inorderTraversal(root2)) print("预期结果:", []) print("-" * 30) # 示例3:构建树 [1] → 输出 [1] root3 = TreeNode(1) print("示例3输出:", sol.inorderTraversal(root3)) print("预期结果:", [1])

LeetCode提交代码

# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] # 递归辅助函数:实现“左→根→右”的遍历逻辑 def traverse(node: Optional[TreeNode]): if node: traverse(node.left) # 先遍历左子树 result.append(node.val) # 再访问当前根节点 traverse(node.right) # 最后遍历右子树 traverse(root) return result

程序运行截图展示

总结

本文介绍了二叉树中序遍历的递归实现方法。中序遍历按照"左子树→根节点→右子树"的顺序访问节点。通过Python代码演示了递归解法,定义了一个辅助函数traverse来实现这一逻辑:先递归遍历左子树,然后访问当前节点值,最后递归遍历右子树。提供了三个测试用例验证正确性:包含单节点树、空树和典型二叉树的情况。时间复杂度为O(n),空间复杂度为O(n)(递归栈空间)。该方法直观体现了中序遍历的定义,是解决此类问题的经典递归范式。

http://www.jsqmd.com/news/319092/

相关文章:

  • nacos作为dubbo服务注册中心
  • @function 和 @description 的区别是什么
  • Neo4j的安装与配置
  • Windows下快速安装Python GDAL指南
  • 【26美赛D题】2026美赛数学建模(MCM/ICM)思路解析及代码分享
  • 永磁同步电机(PMSM)的PI控制
  • Python3 operator模块完全指南
  • linux内核伙伴系统分配物理页面时水位判断zone_watermark_ok
  • ubuntu通过windows主机访问网络
  • 基于微信小程序的社区养老服务平台【源码+文档+调试】
  • 基于微信小程序的校车购票平台【源码+文档+调试】
  • 2026新版Python3.14.2安装全攻略
  • 社会网络仿真软件:NetLogo_(17).NetLogo教学与研究资源
  • ④YT代码去除冗余
  • Python连接KingbaseES全指南
  • 【C标准库】一文吃透 C 语言 assert 断言
  • 从 JSON Schema 到企业级动态数据模型:动态表单的终极演进路线
  • 社会网络仿真软件:NetLogo_(13).社会网络仿真在公共卫生领域的应用
  • 社会网络仿真软件:NetLogo_(16).NetLogo模型分享与发布
  • Doris与Flink整合实战:构建流批一体的大数据处理平台
  • 社会网络仿真软件:NetLogo_(16).NetLogo与其他软件的集成
  • 选九影网络做游戏定制开发,硬核技术壁垒,全流程技术护航
  • 搬了 - guiding
  • 社会网络仿真软件:NetLogo_(12).NetLogo模型调试与测试
  • 书单推荐之豆包高效学习:AI时代的教育破局指南
  • 社会网络仿真软件:NetLogo_(12).社会网络仿真在社会科学中的应用
  • 告别 `print` 调试:构建生产级 Python 应用的日志系统
  • 计算机Java毕设实战-基于springboo的社团成员活动策划组织管理系统(【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 为什么不同天猫超市购物卡回收平台价格不一样?
  • 计算机Java毕设实战-基于小程序的上班企业考勤签到签退下班打卡系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】