Python 在二叉搜索树中搜索
给定二叉搜索树(BST)的根节点和一个值。您需要在BST中找到节点的值等于给定值的节点。返回以该节点为根的子树。如果这样的节点不存在,则应返回NULL 比如说,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 在上面的例子中,如果我们想要搜索
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