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

LeetCode:二叉树的中序遍历

1、题目描述

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 树中节点数目在范围 [0, 100] 内

  • -100 <= Node.val <= 100

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

2、方法1:迭代

迭代法通过显式地使用栈来模拟递归的隐式栈调用,避免了递归可能导致的栈溢出问题。

步骤:

  1. 初始化:创建一个空栈和一个空列表用于存储遍历结果。从根节点开始遍历。

  2. 遍历左子树

    • 将当前节点及其所有左子节点依次压入栈中,直到左子节点为空。

  3. 访问节点

    • 弹出栈顶节点(当前最左节点),将其值加入结果列表。

  4. 遍历右子树

    • 转向当前节点的右子节点,重复上述过程。

  5. 终止条件:当栈为空且当前节点为空时,遍历结束。

public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();TreeNode current = root;while (current != null || !stack.isEmpty()) {// 遍历左子树while (current != null) {stack.push(current);current = current.left;}// 访问节点current = stack.pop();list.add(current.val);// 遍历右子树current = current.right;}return list;
}

 时间复杂度:O(n),空间复杂度:O(n)(栈空间)

3、方法2:递归

递归法直接利用函数的调用栈来实现中序遍历,代码简洁但可能因递归深度过大导致栈溢出。

步骤:

  1. 递归终止条件:当前节点为空时,直接返回。

  2. 递归左子树:对当前节点的左子节点调用递归函数。

  3. 访问节点:将当前节点的值加入结果列表。

  4. 递归右子树:对当前节点的右子节点调用递归函数。

public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();middleTree(root, list);return list;
}public void middleTree(TreeNode node, List list) {if (node == null) return;middleTree(node.left, list);  // 递归左子树list.add(node.val);           // 访问节点middleTree(node.right, list); // 递归右子树
}

 时间复杂度:O(n),空间复杂度:O(n)(调用栈)

http://www.xdnf.cn/news/4408.html

相关文章:

  • 【C++核心技术深度解析:从继承多态到STL容器 】
  • 聊天助手提示词调优案例
  • 力扣热题100,力扣49.字母异位词分组力扣128.最长连续序列力扣.盛水最多的容器力扣42.接雨水(单调栈)
  • 城市开发杂志城市开发杂志社城市开发编辑部2025年第5期目录
  • 免费开源且离线的图片放大工具
  • RS485/modbus转profibus DP转换网关
  • TCP 协议设计入门:自定义消息格式与粘包解决方案
  • 英语二大作文
  • 芝法酱躺平攻略(22)——rabbitmq安装和使用(二)
  • 42 python http之urllib库
  • 论软件的可靠性设计
  • 编码器型与解码器型语言模型的比较
  • 基于亚博K210开发板——独立按键中断实验
  • Android开发-创建、运行、调试App工程
  • 数字中国 | 史宾格荣获 “2025数字中国创新大赛”银奖
  • 安卓基础(点击按钮动态添加视图到容器)
  • ABAQUS三维CT重建插件CT2Model3D V2版本
  • MySQL初阶:基础增删改查(CRUD)
  • docker stack deploy多服务集群堆栈搭建详细指南
  • 实现滑动选择器从离散型的数组中选择
  • Prometheus的安装部署
  • create-vue搭建Vue3项目(Vue3学习2)
  • Transformer面经
  • JavaScript性能优化实战:从瓶颈分析到解决方案
  • 0-带在线搜索和自适应的尺度组合优化神经改进启发式算法(未完)(code)
  • 连接mysql时 Public Key Retrieval is not allowed 问题
  • 前端面试每日三题 - Day 26
  • RabbitMQ 添加新用户和配置权限
  • 龙虎榜——20250506
  • python的selenium操控浏览器