如果二进制树包含重复项或包含+/-无穷大,如何检查它是否是有效的BST?

时间:2017-09-28 04:23:18

标签: 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

    if node.left:
       stack.append((node.left, lb, node.val))
    if node.right:
       stack.append((node.right, node.val, ub))

  return True

但是如果树包含-inf或inf,或者具有重复值,则我的函数无法正常工作。如何调整它以使其更常用?

1 个答案:

答案 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,必须保留所有数据以查找重复项。