0
点赞
收藏
分享

微信扫一扫

leetcode(力扣) 700. 二叉搜索树中的搜索 (递归) (迭代)


文章目录

  • ​​题目描述​​
  • ​​法一(递归):​​
  • ​​完整代码:​​
  • ​​法二(迭代):​​
  • ​​完整代码:​​

题目描述

给定二叉搜索树(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


举报

相关推荐

0 条评论