mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-30 04:36:08 -04:00
65 lines
1.3 KiB
Python
Executable File
65 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
__author__ = "bt3"
|
|
|
|
|
|
from binary_search_tree import BST, Node
|
|
from binary_tree import BT, Node
|
|
|
|
|
|
def isBST(node, min_node=float("-infinity"), maxVal=float("infinity")):
|
|
if not node:
|
|
return True
|
|
|
|
if not min_node <= node.item <= maxVal:
|
|
return False
|
|
|
|
return isBST(node.left, min_node, node.item) and \
|
|
isBST(node.right, node.item, maxVal)
|
|
|
|
|
|
|
|
def isBST_other_method(node, max_node=None, min_node=None):
|
|
|
|
if not node:
|
|
return True
|
|
|
|
left, right = True, True
|
|
min_node = min_node or float('inf')
|
|
max_node = max_node or -float('inf')
|
|
|
|
if node.left:
|
|
if node.left.item > node.item or node.left.item > max_node:
|
|
left = False
|
|
else:
|
|
max_node = node.item
|
|
left = isBST(node.left, max_node, min_node)
|
|
|
|
if node.right:
|
|
if node.right.item < node.item or node.right.item < min_node:
|
|
rihjt = False
|
|
else:
|
|
min_node = node.item
|
|
right = isBST(node.right, max_node, min_node)
|
|
|
|
return left and right
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
bt = BST()
|
|
for i in range(1, 10):
|
|
bt.add(i)
|
|
|
|
assert(isBST(bt.root) == True)
|
|
|
|
bt = BT()
|
|
for i in range(1, 10):
|
|
bt.add(i)
|
|
|
|
assert(isBST(bt.root) == False)
|
|
|
|
|