Algorithm 如果二叉树包含重复项或包含+;/,如何检查二叉树是否为有效的BST无穷
我检查二叉树是否为BST的解决方案如下:Algorithm 如果二叉树包含重复项或包含+;/,如何检查二叉树是否为有效的BST无穷,algorithm,tree,Algorithm,Tree,我检查二叉树是否为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
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
def是(节点):
如果节点为无:
返回错误
堆栈=[(节点,-float('inf'),float('inf')]
当len(stack)>0时:
节点,lb,ub=stack.pop()
如果node.val=ub:
返回错误
如果node.left:
stack.append((node.left,lb,node.val))
如果node.right:
stack.append((node.right、node.val、ub))
返回真值
但是,如果树包含-inf或inf,或者有重复的值,我的函数将无法正常工作。我如何调整它使其工作得更一般?您可以实现一个更优雅的
递归
函数,还可以使用set:
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()
在这里,您要删除
节点
,您必须保留查找重复节点所需的所有数据。您可以使用set:
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()
在这里,您要删除节点
,您必须保留所有用于查找重复节点的数据