Skip to content

【力扣】94. 二叉树的中序遍历 flag终于达成更文35篇的目标了

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

春招打卡第22天第35篇。

勤学似春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。

掘金的活动真多哇,这个月决定每天用go刷题,一方面提升一下算法水平,另一方面沉淀一下go语言的学习。

Let's GO!

题目描述

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

示例

示例 1:

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

输出:[1,3,2]

示例 2:

输入:root = []

输出:[]

示例 3:

输入:root = [1]

输出:[1]

示例 4:

输入:root = [1,2]

输出:[2,1]

示例 5:

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

输出:[1,2]

提示:

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

-100 <= Node.val <= 100

进阶:

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

题目分析

首先,我们要明确一个概念:二叉树的中序遍历是什么?

答案:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。

思路讲解

进阶中也给出了我们提示,使用递归算法能非常简单的解题,因为二叉树中序遍历的过程天然具有递归调用的特点。

具体执行思路请看下面代码段中的注释。

AC代码

go
func inorderTraversal(root *TreeNode) (res []int) {
//自定义函数 方便进行递归调用
var inorder
func(node *TreeNode)      	inorder =
func(node *TreeNode) {
//如果根节点为空,直接返回空数组
if node == nil {
return
}
//传入根节点的左节点 		inorder(node.Left)
//追加切片
res = append(res, node.Val)
//传入根节点的右节点 		inorder(node.Right)
} 	inorder(root)
return
}

运行结果

image.png

总结

复杂度分析

时间复杂度:O(n),其中 n 为二叉树节点的个数。

空间复杂度:O(n),空间复杂度取决于递归的栈深度。

来源说明

来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/bi…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

最后

感谢阅读,欢迎大家三连:点赞、收藏、投币(关注)!!!

8e95dac1fd0b2b1ff51c08757667c47a.gif

AI 应用开发训练营 · 现在开始

别只收藏 AI 文章,今天就做出第一个能上线的项目

文章解决认知,项目才证明能力。把 Agent、RAG、MCP 变成可运行、可展示、可面试表达的成果,现在就从一次岗位准备度自测开始。

立即开始 AI 岗位准备度自测 查看训练营路线
真实学员成果先看成果,再决定是否开始 →
  1. 01选方向
  2. 02做项目
  3. 03出成果
  4. 04拿面试