tvl-depot/scratch/facebook/bst-checker.py
William Carroll 2b5bbb98ca Refactor existing bst-checker implementation
I believe the previous solution is invalid. This solution works and it should be
more time and space efficient.

Space-wise our stack grows proportionate to the depth of our tree, which for a
"balanced" BST should be log(n). Doing a BFT on a BST results in memory usage of
n because when we encounter the leaf nodes at the final level in the tree, they
will be 1/2 * n for a balanced BST.
2020-11-21 14:14:50 +00:00

49 lines
935 B
Python

from collections import deque
class Node(object):
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
def is_bst(self):
s = []
s.append((float('-inf'), self, float('inf')))
while s:
lo, node, hi = s.pop()
if lo <= node.value <= hi:
node.left and s.append((lo, node.left, node.value))
node.right and s.append((node.value, node.right, hi))
else:
return False
return True
x = Node(
50,
Node(
17,
Node(
12,
Node(9),
Node(14),
),
Node(
23,
Node(19),
),
),
Node(
72,
Node(
54,
None,
Node(67)
),
Node(76),
),
)
assert x.is_bst()
print("Success!")