簡體   English   中英

在二叉搜索樹中搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM