Python 在二叉搜索树中搜索

Python 在二叉搜索树中搜索,python,recursion,linked-list,Python,Recursion,Linked List,给定二叉搜索树(BST)的根节点和一个值。您需要在BST中找到节点的值等于给定值的节点。返回以该节点为根的子树。如果这样的节点不存在,则应返回NULL 比如说, Given the tree: 4 / \ 2 7 / \ 1 3 And the value to search: 2 You should return this subtree: 2 / \ 1 3 在上面的例子中,如果我们想要搜索

给定二叉搜索树(BST)的根节点和一个值。您需要在BST中找到节点的值等于给定值的节点。返回以该节点为根的子树。如果这样的节点不存在,则应返回NULL

比如说,

Given the tree:
        4
       / \
      2   7
     / \
    1   3

And the value to search: 2
You should return this subtree:

  2     
 / \   
1   3
在上面的例子中,如果我们想要搜索值5,因为没有值为5的节点,我们应该返回NULL

请注意,空树由NULL表示,因此您将看到预期的输出(序列化树格式)为[],而不是NULL

# 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(root is None) or (root.val == val):
            return root

        if(root.val>val):
            return self.searchBST(root.right,val)
        elif(root.val<val):
            return self.searchBST(root.left,val)
二叉树节点的定义。 #TreeNode类: #定义初始化(self,x): #self.val=x #self.left=无 #self.right=无 类解决方案: def searchBST(self,root:TreeNode,val:int)->TreeNode: 如果(root为None)或(root.val==val): 返回根 如果(root.val>val): 返回self.searchBST(root.right,val)
elif(root.val您已经翻转了值。如果
root.val>val
您需要搜索
root.left

class Solution:
    def searchBST(self, root: TreeNode, val: int) -> TreeNode:


        if(root is None) or (root.val == val):
            return root

        if(root.val>val):
            return self.searchBST(root.left,val) // FLIPPED
        elif(root.val<val):
            return self.searchBST(root.right,val) // FLIPPED
类解决方案:
def searchBST(self,root:TreeNode,val:int)->TreeNode:
如果(root为None)或(root.val==val):
返回根
如果(root.val>val):
返回self.searchBST(root.left,val)//翻转

elif(root.val您的代码不完全正确,如果当前节点值(root)大于您正在搜索的值,则向左,否则向右

在您当前的代码中,您正在做相反的事情

因此,正确的方法如下:

if(root.val>val):
        return self.searchBST(root.left,val) #changed to root.left
    elif(root.val<val):
        return self.searchBST(root.right,val) #changed to root.right
if(root.val>val):
返回self.searchBST(root.left,val)#更改为root.left

elif(root.val)您已经交换了条件。在代码中,如果val小于root,则向右移动,如果val大于root,则向左移动。
if(root.val>val):
        return self.searchBST(root.left,val) #changed to root.left
    elif(root.val<val):
        return self.searchBST(root.right,val) #changed to root.right