力扣题目:#530.二叉搜索树的最小绝对差
刷题时长:10min
解题方法:递归+双指针
复杂度分析
- 时间O(n)
- 空间O(n)
问题总结
- 双指针移动
本题收获
- 遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了
- 利用float(‘inf')给变量预赋最大值
力扣题目:#501.二叉搜索树中的众数
刷题时长:40min
解题方法:递归
复杂度分析
- 时间O(n)
- 空间O(n)
问题总结
- debug半天发觉是变量拼写错误,其中一个maxcnt硬是写成了maxcut没看出来
本题收获
- 解题思路:利用BST性质+中序遍历,遍历过程中即可更新cnt和maxcnt
- 变量作用域关键词 global vs nonlocal
- global全局变量:变量定义在函数外部的时候,如果函数里面想改变这个全局变量的值,需要在当前的引用函数里面重新定义一个变量 并用关键字global修饰。
- nonlocal非全局变量:在函数的函数里面使用函数的变量。
力扣题目:#236. 二叉树的最近公共祖先
刷题时长:15min 参考视频
解题方法:递归(后序遍历)
复杂度分析
- 时间O(n)
- 空间O(n)
问题总结
- 解题思路不清
- 单层递归逻辑把左右都为空的情况分错类给return root了,应return左右任意None
本题收获
- 解题思路:情况1)p 和 q 的祖先需往上搜索;情况2)p 和 q 某一个结点本身就是祖先
- 返回条件:1) 遍历到空结点 返回None;2)当遇到p或q的其中一个结点,直接返回该结点
- 左右递归
- 中,接到左右递归传来的值进行处理
- 左右子树都不为空,则左右子树分别存在一个p或p,就返回 中 ,此时中为祖先
- 左为空,右不为空,就向上返回 右;反之左不为空,右为空,就返回 左
- 左右都为空,则中的孩子没有p或q,就返回None