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)
本题目还是比较有意思的,咱们下次继续
以上是本期内容,欢迎大佬们点赞评论,下期见~~~