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

力扣-94.二叉树的中序遍历(Java递归)

文章目录

94.二叉树的中序遍历(力扣题目)

题目描述

问题理解

题解

时间复杂度分析

图示解析

总结


94.二叉树的中序遍历(力扣题目)

题目描述

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

问题理解

二叉树的中序遍历是先找当前节点是否有左节点,如果有就先找左节点,如果没有就遍历自己然后再找右节点,循环往复这个操作。这个文字问题我们能翻译成代码。


题解

/** * 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 { List<Integer> result = new ArrayList<>(); public List<Integer> inorderTraversal(TreeNode root) { if(root != null) function(root); return result; } public void function(TreeNode node){ // 查找左节点操作 if(node.left != null) function(node.left); // 对自身进行操作,可以print自身,但是我们根据题目要求添加到一个列表中最后全部打印出来 result.add(node.val); // 查找右节点操作 if(node.right != null) function(node.right); } }

时间复杂度分析

有多少个节点递归函数就要运行多少遍,所以时间复杂度为O(n)


图示解析

本图示解析为二叉树的中序递归遍历。本图示解析中绿色代表带输出节点,红色为已输出节点,白色为未查找节点,图示分析第二行文字描述为伪代码解析(functionx中x代表当前节点的值)。

1.以根节点5开始,查找节点的左子树,找到左节点3,进入左节点3。

function5查找左节点不为空进入function3

2.进入节点3,查找节点3的左节点,找到左节点2,进入左节点2。

function3查找左节点不为空,进入function2

3.进入节点2,查找节点2的左节点,左节点为空,打印自身,然后查找右节点,右节点也为空,返回上一级(因为节点2已经打印完成所以是红色的状态)。

function2查找左节点为空,打印自身,查找右节点为空,function2函数结束返回function3函数。因为function3是运行到一半进入function2函数所以调用function2函数结束之后回到function3。

4.返回节点3,遍历自身,查找右节点,找到右节点4,进入右节点4。function3打印自身,查找右节点不为空,进入function4

5.进入节点4,查找右节点为空,打印自己,查找右节点为空返回上一级,节点3的左节点、自身、右节点已经完成,返回根节点5,打印自己然后查找右节点8,进入又节点8。

function4查找左节点为空,打印自身,查找右节点为空,function4函数结束返回function3函数,function3函数结束返回function5函数,打印自身,查找右节点不为空,进入function8

6.进入节点8,查找左节点不为空,进入左节点7。function8查找左节点不为空,进入function7

7.进入节点7,查找左节点为空,打印自身,查找右节点为空,返回父节点8。

function8进入function7,function7查找左节点为空,打印自身,function7查找右节点为空。function7函数结束返回function8函数。

8.进入节点8,打印自身,查找左节点不为空,进入节点9

function7结束,fuction8左节点查找操作完成,打印自身,查找function8的右节点不为空,进入function9

9.进入节点9,查找左节点为空,打印自身,查找右节点为空,自此二叉树的中序遍历全部完成。

fuction8查找右节点进入function9,function9查找左节点为空,打印自身,function9查找右节点为空。function9函数结束返回function8函数,function8函数查找右节点操作完成,function8函数结束返回function5函数,function5函数查找左节点操作完成,function5函数结束,自此程序运行完毕


总结

递归是“自身调用自身,逐步拆解问题”,本质是把复杂的大问题拆解为结构相同的小问题,直到触达 “终止条件” 后回溯合并结果。递归非常适合二叉树的遍历,已经完成了二叉树的中序遍历(左根右),可以试着自己完成二叉树的前序(根左右)和后序(左右根)遍历。


如果你觉得这篇论文对你有帮助的话,欢迎点赞、收藏并分享给身边在学算法的小伙伴

http://www.cnnetsun.cn/news/1488.html

相关文章:

  • 综合素质面试hr面
  • 降重与AIGC优化的认知任务解耦:八类工具在四项核心活动中的生态位映射与协同路径
  • PaperXie 降重复率/AI率功能如何化解学术写作中的“生成式焦虑”:一种面向“学术表达真实性”的智能协作框架——一位研究生的真实实践记录
  • 科研文稿 “学术查重的降噪滤波器”:PaperXie 降重降 AI 率如何让重复文本从 “信号杂音” 变 “导师认可的纯净成果”
  • 八款 AI 文本优化工具能力棱镜:基于“语义保真—AI消除—学科适配—流程嵌入”四维模型的八工具全景评估
  • 论文查重 / AI 检测总超标?PaperXie 用 “学术表达重塑法” 帮你把重复率 / AI 率压到安全线内
  • 构建你的“学术表达合规生态”:八款降重/AIGC工具如何在不同场景中协同降低检测风险?
  • PaperXie 数据分析功能如何重塑科研决策支持:一种面向“从数据到洞见”闭环构建的智能协作框架——一位研究生的真实实践记录
  • 论文数据分析总卡壳?PaperXie 用 “数据逻辑锚定法” 帮你从 “乱数堆” 里挖出研究结论
  • 50天50个小项目 (React19 + Tailwindcss V4) ✨| FAQ Collapse(问题解答折叠面板)
  • 《Mysql数据库应用》 第2版 郭文明 实验2 数据查询操作 答案
  • 同样是单片机工程师,高段位的已经在“定义智能”,新手还在跟LED死磕?
  • STM32居然能和服务器“聊天”?MQTT通信实现指南,小白也能看懂!
  • PPT文件的两种不可编辑情况
  • Excel文件中的保护工作表与工作簿的区别与应用
  • python猫眼电影数据可视化与智能分析平台 数据大屏 电影票房预测 电影推荐(协同过滤推荐算法)爬虫flask框架
  • 基于知识图谱电影推荐问答系统 neo4j图形数据库 问答系统 推荐系统 协同过滤推荐算法(建议收藏)✅
  • 基于python商品购物商城系统 购物系统 Django框架 购物平台 网购平台 大数据(建议收藏)✅
  • 基于python二手商品交易系统 二手网站 跳蚤网站 二手商品交易 大数据毕业设计(附源码)
  • YOLOv8测速测距车辆计数系统 ByteTrack算法 深度学习 目标计数 目标测速 目标检测
  • 深度学习车流量监测统计系统 YOLOv8模型 自定义检测区域 智慧交通大数据 多目标跟踪算法 COCO2017数据集
  • 深度学习YoloV8模型垃圾分类系统 深度学习pytorch 大数据 毕业设计(数据集+源码+文档)
  • 垃圾分类识别系统 pytorch框架 深度学习多模型LeNet、AlexNet、VGG、GoogLeNet、ResNet、MobileNet、MobileNet、RegNet模型 毕业设计
  • 全栈项目:python豆瓣电影推荐系统 Python+MySQL 可视化分析+个性化推荐 协同过滤推荐算法 毕业设计源码✅
  • Python+Django+协同过滤 电影推荐系统 数据分析 协同过滤算法(词云分析 源码+文档)大数据 毕业设计
  • 799-LangChain框架Evaluations使用培训总体介绍
  • 811-LangChain框架Use-Cases - SQL案例分析报告
  • 812-LangChain框架Use-Cases - SpeechToSQL案例分析报告
  • 813-LangChain框架Use-Cases - TextToSQL案例分析报告
  • 821-LangChain框架Use-Cases - 简历推荐与评估系统案例分析