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
考虑一个BST,其中a是根值,B是其左子树根处的值,C是其右子树根处的值。您的代码将验证A>B,以及B
或者,根据您的示例:它检查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,因此方法应该返回。但是,我的代码返回。 我怎么能控制这个案子?如何检查左/右子树中的所有值都低于/大于根(不仅是直接子树)?