文章目录
- 题目描述
- 法一(递归):
- 完整代码:
- 法二(迭代):
- 完整代码:
题目描述
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
例如,
给定二叉搜索树:
4
/ \
2 7
/ \
1 3
和值: 2
你应该返回如下子树:
2
/ \
1 3
在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。
法一(递归):
想说递归吧,确定递归出口,显然,如果当前指针指向空值,或者当前指针所指向的值是我们要找到的值就返回。
- root == None
- root.val == 题目中要找的值
题目中给出的是二叉搜索树,所以 左节点 < 根节点 < 右节点
假设题目中要求找的目标值为 val。
递归体:
若当前值小于 val 则去右子树找,否则去左子树找。
完整代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def searchBST(self, root: TreeNode, val: int) -> TreeNode:
if not root:
return
if root.val == val:
return root
if root.val < val:
return self.searchBST(root.right,val)
else:
return self.searchBST(root.left,val)
法二(迭代):
和递归是一个思路。
显然p指向根节点,然后不断循环p直到p循环完,若p.val等于我们要找的值则直接返回,否则 p.val<我们要找的值则往右,否则往左。
如果没找到则返回None。
完整代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def searchBST(self, root: TreeNode, val: int) -> TreeNode:
p = root
while p:
if p.val == val:
return p
elif p.val < val:
p = p.right
else:
p = p.left
return None