【LeetCode】94. 二叉树的中序遍历

143 阅读3分钟

image.png

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

测试岗位现在也不容易哈哈哈,基本的算法还是要知道一些的,今天我们来看看简单的二叉树

一、题目描述:

  • 题目内容

  • 题目示例

  • 题目解析

我们来看一下这个题目给与了哪些我们有用的信息:

  • 给定的二叉树,不是多叉树,给出的二叉树的根节点
  • 我们知道二叉树,只有左子树和右子树,如果有左子树,那么题目中就会给予对应的数字,如果没有,那么就会补充 null,例如题目中给出的二叉树可以理解为是这个样子的

二、思路分析:

首先我们要先明白,简单来看二叉树就是根上面最多有两个叉多叉树的话就是一个节点上面最多有大于 2 个叉的树

那么还记得咱们在大学的时候就学习过基本的数据结果,关于二叉树的遍历,分为前序遍历,中序遍历,和后序遍历

如何判断他们遍历的顺序的呢?

  • 前序 -- 根左右,先遍历树的根节点,再遍历树的左子树,最后遍历右子树
  • 中序 -- 左根右,先遍历树的左子树,然后遍历树的根节点,最后遍历树的右子树
  • 后序 -- 左右根,先遍历树的左子树,再遍历树的右子树,最后遍历根节点

就按照上面的例子来看,

  • 前序就是 123
  • 中序就是 132
  • 后序就是 321

有没有感觉是比较简单的,我们来一个节点多的例子,我们来看看中序遍历应该是多少

例如给出的根节点是:

root = [1,2,3,4,5,null,6] ,可以看到对应的是这一张图

那么现在中序遍历的话,我们就要遵循 左根右 的原则来遍历树

我们可以一步一步的来推演一下

按照上述推演的顺序,我们就可以得到这样的结果

[4,2,5,1,3,6]

相信推演的这个顺序大家都是能够明白的吧,要是还不明白的话,再从头看一下

接下来咱们就编码,相对来说写起来还是非常明确的

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
	def inorderTraversal(self, root):
		"""
		:type root: TreeNode
		:rtype: List[int]
		"""
		res = []
		def dfs(root):
			if not root:
				return
			# 按照上述给出的思路,左-根-右的顺序来遍历就可以了
			dfs(root.left)
			res.append(root.val)
			dfs(root.right)
		dfs(root)
		return res

三、总结:

本期,关于二叉树的中序遍历,提交AC记录如下:

时间复杂度O(n)

空间复杂度O(n)

本题目还是比较有意思的,咱们下次继续

以上是本期内容,欢迎大佬们点赞评论,下期见~~~