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代码
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
}
运行结果
总结
复杂度分析
时间复杂度:O(n),其中 n 为二叉树节点的个数。
空间复杂度:O(n),空间复杂度取决于递归的栈深度。
来源说明
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/bi…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
最后
感谢阅读,欢迎大家三连:点赞、收藏、投币(关注)!!!