[英]Search in a Binary Search Tree
給定二叉搜索樹 (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)
現在,如果我將第二個 if 條件更改為:
return self.searchBST(root.left, val) if val < root.val \
else self.searchBST(root.right, 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
您的代碼不完全正確,如果當前節點值(根)大於您要搜索的值,則向左走,否則向右走。
在您當前的代碼中,您正在做相反的事情。
所以,正確的方法是這樣的:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.