拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 对“验证二叉搜索树”问题的预期输出感到困惑

对“验证二叉搜索树”问题的预期输出感到困惑

白鹭 - 2022-01-26 2085 0 0

我试图撰写一个验证二叉搜索树的算法。这是为了回答以下算法问题:对“验证二叉搜索树”问题的预期输出感到困惑

这显然不是一个有效的二叉搜索树,因为节点3小于它的祖父节点5

在二叉搜索树中,右边的每个节点(包括所有祖先)都必须更大(或更大或相等,具体取决于您的定义)。左子树也是如此。请注意,在这种情况下,本文给出了问题的明确规定,他们必须小于大于所以等于无效。这样想:您需要能够在 BST 中进行二进制搜索。当您向右时,您希望那里的所有节点都大于父节点。如果在那里找到小于父节点的节点,则排序被破坏,您无法进行二进制搜索。您需要线性搜索。3本例中的二进制搜索将回传false,而它显然在那里。所以,它不是一个有效的二叉搜索树。

您的算法仅检查直接的左右孩子是否遵守此条件。

要更正它,您需要将允许的最小值和最大值传递给递回函式。当您向左走时,您将最大值设定为等于当前节点值。当您向右时,您将最小值设定为当前节点值。这确保了一个节点左侧的节点永远不会大于该节点。

一种可能的实作方式如下:

class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        return self.isValidBSTHelper(root, None, None)
    def isValidBSTHelper(self, root: TreeNode, min_val: int, max_val: int)-> bool:
        if root == None: return True
        if (min_val != None and root.val <= min_val) or (max_val != None and root.val >= max_val):
            return False
        
        return self.isValidBSTHelper(root.left, min_val, root.val) \
                and self.isValidBSTHelper(root.right, root.val, max_val)
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *