leetcode 700【二叉搜索树的搜索】
题目链接
https://leetcode-cn.com/problems/search-in-a-binary-search-tree/submissions/
解题思路与代码思路:
递归法
如果root为空或者root和val的值相等,直接返回root,这里注意要把判断为空放在条件前面,避免为空时取不了root.val值。根据二叉搜索树的性质去搜左右树即可
迭代法
使用while循环,跳出循环的条件就是root为空或者与val值相等,如果不满足,则更改root的位置,根据二叉搜索树的性质去搜左右树即可
代码:
递归法
class Solution:
def searchBST(self, root: TreeNode, val: int) -> TreeNode:
if root is None or val == root.val:
return root
return self.searchBST(root.left,val) if val < root.val else self.searchBST(root.right,val)
迭代法
class Solution:
def searchBST(self, root: TreeNode, val: int) -> TreeNode:
while root is not None and root.val != val:
root = root.left if val < root.val else root.right
return root
复 杂 度 分 析 : \color{red}{复杂度分析:} 复杂度分析:
- 递归法
- 时间复杂度:O(H),H为树的高度。平均复杂度为O(logN),最坏为O(N)
- 空间复杂度:O(H),递归栈的深度为H,平均情况下深度为O(logN),最坏情况下深度为 O(N)
- 迭代法
- 时间复杂度:O(H),H为树的高度。平均复杂度为O(logN),最坏为O(N)
- 空间复杂度:O(1)