力扣题目:#235. 二叉搜索树的最近公共祖先
刷题时长:15min
解题方法:迭代法
复杂度分析
- 时间O(n)
- 空间O(1)
问题总结
- 没能在找到答案的时候立即在递归中返回
本题收获
- BST用迭代法yyds
- 在递归函数有返回值的情况下:如果要搜索一条边,递归函数返回值不为空的时候,立刻返回,如果搜索整个树,直接用一个变量left、right接住返回值,这个left、right后序还有逻辑处理的需要,也就是后序遍历中处理中间节点的逻辑(也是回溯)
- 本题就是标准的搜索一条边的写法,遇到递归函数的返回值,如果不为空,立刻返回
- #236普通二叉树中需要左右子树的返回值后判断,所以是搜索整颗树
力扣题目:#701.二叉搜索树中的插入操作
刷题时长:10min
解题方法:迭代法
复杂度分析
- 时间O(n)
- 空间O(1)
问题总结
- 循环未及时break
本题收获
- 递归法+返回值
- 迭代法可以加一个指针记录父节点,然后通过对比子节点的值大小,判断是左孩子还是右孩子
力扣题目:#450.删除二叉搜索树中的节点
刷题时长:参考视频后10min
解题方法:递归+二分
复杂度分析
- 时间O(n)
- 空间O(n)
问题总结
- 没看明白迭代法和普通二叉树案例
本题收获
- 此题递归比迭代简单好理解,直接通过递归返回值删除节点,而不用额外判断删除节点是其父节点的左还是右孩子
- 二叉搜索树添加节点只需要在叶子上添加就可以的,不涉及到结构的调整,而删除节点操作涉及到结构的调整