我检查二叉树是否为BST的解决方案如下:
def is_BST(node):
if node is None:
return False
stack = [(node, -float('inf'), float('inf')]
while len(stack) > 0:
node, lb, ub = stack.pop()
if node.val <= lb or node.val >= ub:
return False
if node.left:
stack.append((node.left, lb, node.val))
if node.right:
stack.append((node.right, node.val, ub))
return True
但是如果树包含-inf或inf,或者具有重复值,则我的函数无法正常工作。如何调整它以使其更常用?
答案 0 :(得分:0)
您可以使用set:
实现更优雅的recursive
功能
set = {-float('inf'), float('inf')}
isValid = True
def BST(node):
if(node is None):
return
if node.value in set:
global isValid
isValid = False
else:
set.add(node.value)
BST(node.left)
BST(node.right)
您的代码似乎无法正常运行:
node, lb, ub = stack.pop()
您要删除nodes
,必须保留所有数据以查找重复项。