当前位置: 首页 > 知识库问答 >
问题:

我的二叉搜索树验证代码有什么问题?

淳于坚壁
2023-03-14
         10
        /  \
       5   15
          /  \
         6    20

下面是我的代码:

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None  


    def isValidBST(self, root)
    """  
    :type root: TreeNode  
    :rtype: bool  
    """  

    if not root:  
        return True  
    else:  
        if root.left and root.right:  
            return root.left.val < root.val < root.right.val and \    
                   self.isValidBST(root.left) and self.isValidBST(root.right)  
        elif root.left and not root.right:  
            return root.left.val < root.val and self.isValidBST(root.left)  
        elif root.right and not root.left:  
            return root.right.val > root.val and self.isValidBST(root.right) 
        else:  
            return True  

共有1个答案

法玮
2023-03-14

考虑一个BST,其中a是根值,B是其左子树根处的值,C是其右子树根处的值。您的代码将验证A>B,以及B C。

或者,根据您的示例:它检查5<10,10<15,6<15和15<20,但不检查6>10。

回想一下,BST的定义讨论的是子树中的所有节点,而不仅仅是根。

 类似资料:
  • 上面的代码对所有测试用例都能很好地工作。但是,下面的代码不是。 额外的IF条件有什么需要?即使没有它们,函数也应该从下面的if条件返回false?我错过了什么?

  • 我的解决方案在第二个例子中失败了,我不知道为什么,请解释。 问题是: 给定一棵二叉树,确定它是否是有效的二叉查找树(BST)。 假设BST的定义如下: 节点的左子树只包含键小于节点键的节点。节点的右子树仅包含键大于节点键的节点。左子树和右子树都必须是二进制搜索树。 例1: 输入:[2,1,3] 输出:真 例2: 输入:[5,1,4,空,空,3,6] 输出:false 说明:根节点的值为5,但其右子

  • 我试图验证二叉查找树。给定二叉树的根,确定它是否是有效的二叉查找树(BST)。 有效的BST定义如下: 节点的左子树只包含键小于节点键的节点。节点的右子树只包含键大于节点键的节点。左子树和右子树也必须是二叉搜索树。 https://leetcode.com/problems/validate-binary-search-tree/ 我正在使用递归解决方案,但它未能通过以下测试用例: 输入:[2,1

  • 我正在为分配制作二叉搜索树和AVL树。 尝试向二叉搜索树添加1,000,000个元素时遇到问题,但我可以向AVL树添加键->值对。(AVLTree没有问题) 如果我平衡二叉搜索树,与AVL树没有区别??(如果我平衡二叉搜索树,它变成AVLTREE有什么意义?) 插入15,000个元素后,我从二叉搜索树中得到错误:线程“main”java.lang.StackOverflowError中出现异常 项

  • 一直在研究一些黑客等级破解编码面试问题,最近才发现这一个:二叉树问题。 在问题描述中,作者介绍了被认为是有效的二叉树的内容。 “节点左侧子树中每个节点的值都小于该节点的数据值。 然而他们提到这棵树 是有效的。但根据他们对有效二叉搜索树的描述,这棵树不是无效的吗,因为节点4有一个节点5的左子节点,后者更大。还是我误解了什么是有效的BST?

  • 我正试图解决这个问题,但我遇到了一些麻烦: 在二进制搜索树(BST)中: 节点左子树中每个节点的数据值小于该节点的数据值。 节点右侧子树中每个节点的数据值大于该节点的数据值。 如您所见,节点(4)位于节点(3)的左侧子树中,尽管4大于3,因此方法应该返回。但是,我的代码返回。 我怎么能控制这个案子?如何检查左/右子树中的所有值都低于/大于根(不仅是直接子树)?