Let’s use stack implicitly:
def is_bst(node):
cv = None
stack = []
while node or stack:
if node:
stack.append(node)
node = node.left
else:
node = stack.pop()
if cv is not None and node.data < cv:
return False
cv = node.data
node = node.right
return True