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

JAVA练习304- 二叉树的中序遍历

题目概览

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

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

来源:94. 二叉树的中序遍历 - 力扣(LeetCode)

解题分析

方法一:递归

左 - 根 - 右 顺序递归即可。

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

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); if (root == null) { return result; } List<Integer> left = inorderTraversal(root.left); result.addAll(left); result.add(root.val); List<Integer> right = inorderTraversal(root.right); result.addAll(right); return result; } }

方法二:迭代 + 栈

根据栈先进后出的特性,可以现将二叉树的所有左节点都入栈,栈顶的节点一定是第一个节点,出栈并记录该节点值,将该节点右节点继续刚才左节点入栈的操作,没有则继续出栈,直到栈为空。

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

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); if (root == null) { return result; } Deque<TreeNode> stack = new LinkedList<>(); while(root != null || !stack.isEmpty()) { while(root != null) { stack.push(root); root = root.left; } TreeNode node = stack.pop(); result.add(node.val); root = node.right; } return result; } }
http://www.jsqmd.com/news/1213701/

相关文章:

  • 终极窗口尺寸调整工具WindowResizer:5步解决顽固窗口问题
  • 3步掌握《命运2》单人模式:Destiny 2 Solo Enabler终极指南
  • AMD Ryzen硬件调试终极指南:SMUDebugTool完全掌控手册
  • 如何快速解密中兴光猫配置文件:技术爱好者的终极解决方案
  • Windows系统文件dmiso8601utils.dll丢失找不到问题解决
  • 干了八年收割机销售,AI获客怎么让客户主动找上门? - 红枫叶GEO优化公司
  • deepin 25 Preview系统安装与优化指南
  • Ubuntu下Flatpak版Steam安装与优化指南
  • Amlogic S9xxx设备Armbian系统终极优化指南:从性能瓶颈到极致体验
  • 晋中本地黄金回收避坑,街坊叔婶亲历这五家正规店才敢说 - 小城生活闲谈
  • JAVA练习305- 二叉树的最大深度
  • 抖音内容管理革命:Douyin Downloader 一站式批量下载解决方案
  • Python 量化核心基础:前复权、后复权与不复权有什么区别?基于 QuantDash 的数据处理与回测避坑指南
  • 水落石出亦有时
  • 如何快速提升老旧窗口清晰度:Magpie超分辨率工具的终极指南
  • 终极免费激活指南:3分钟搞定Windows和Office完整教程
  • NxShell:为什么这个跨平台SSH客户端能重新定义远程服务器管理?
  • AI自主获取技能:一行命令实现智能工具自动发现与组合
  • 设计师正在悄悄淘汰的Canva用法:2024 Q2平台算法更新后,这6种操作已触发自动降权
  • HeyGen数字人批量生成卡顿?实测对比RTX4090/AMD W7900/A100三类硬件在1080p×30fps下的帧率衰减曲线与最优批处理策略
  • 2026广州黄金回收权威横评|7大品牌实测对比,添价收综合实力断层第一 - 分享测评官
  • 麒麟系统输入法窗口级自动切换配置指南
  • Android开发入门:从环境搭建到四大组件详解
  • Faster-Whisper-GUI:免费离线的语音识别工具,5分钟完成音频转文字终极方案
  • 3分钟搞定Windows苹果设备驱动:终极安装指南与技巧
  • 2026深圳装修公司甄选指南|6家综合表现较好的本地装企参考 - 装修新知
  • Zygisk Assistant终极指南:Android Root隐藏的完整解决方案
  • Windows系统文件dmocx.dll丢失找不到问题解决
  • DBCHM数据库文档自动化生成工具:5分钟解决团队协作文档管理难题
  • Linux中文输入法安装与优化全指南