# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def searchBST(self, root: TreeNode, val: int) -> TreeNode:
#迭代
if not root:
return None
current = root # 遍历指针
while current:
if current.val == val:
return current
elif current.val > val:
current = current.left
else:
current = current.right
return None
#递归
if not root:
return root
#如果大于根节点就在右子树找
if root.val<val:
return self.searchBST(root.right,val)
#如果小于根节点就在左子树找
elif root.val>val:
return self.searchBST(root.left,val)
else:
return root
- 首先是一个二叉搜索树,那就需要利用其性质去解题
- 两个方法
- 迭代
- 如果根节点不为空,进入while循环
- 如果和目标节点相同就直接返回子树
- 如果节点值大于目标节点,那就找左子树
- 如果节点值小于目标节点,那就找右子树
- 如果直到节点为空还找不到那就返回空
- 递归
- 如果节点值大于目标节点那就递归的找左子树
- 如果节点值小于目标节点那就递归的找右子树
- 如果节点值和目标节点相等那就返回子树
- 迭代
总结:对于二叉搜索树来说,能用递归不用迭代。因为递归比较好理解树的查找和构造。