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

你可能感兴趣的:(个人笔记,交流学习,leetcode,python)