【发布时间】:2020-04-07 16:34:59
【问题描述】:
我目前正在尝试检查一棵树是否是 BST,同时注意这些值不能等于树中的任何其他值。我尝试计算每个值应该是的间隔(将最小值和最大值视为 arg[0] 和 arg[1])。 例如,如果我们在左子树上一直向下,将没有最小值,只有最大值。但是,当我们向右切换时,我们也会有一个最小值(我们刚刚向右切换的根节点的值)。 但是,我的代码没有显示正确的答案,我不知道为什么。请你帮助我好吗? 这些是我的功能:(我正在hackerrank上解决这个问题,因此这就是为什么我有两个功能而不是一个)
""" Node is defined as
class node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
"""
def check_binary_search_tree_(root):
check_bst(root,None,None)
def check_bst(root,*arg):
res, res2 = True, True
if arg[0] is None and arg[1] is not None:
if root.data >=arg[1]:
return False
elif arg[1] is None and arg[0] is not None:
if root.data <= arg[0]:
return False
elif arg[1] is not None and arg[0] is not None and (root.data<=arg[0] or root.data >= arg[1]):
return False
if root.left:
res = check_bst(root.left, arg[0], root.data)
if root.right:
res2= check_bst(root.right, root.data, arg[1])
if not res or not res2:
return False
return True
【问题讨论】:
-
有一种更简单的算法,在遍历树时只需要一个值。
标签: python search tree binary-tree binary-search-tree