May 22, 2020 10:44 Technology
This is a LeetCode medium level question solved by recursion.
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
Example 1:
2
/ \
1 3
Input: [2,1,3]
Output: true
Example 2:
5
/ \
1 4
/ \
3 6
Input: [5,1,4,null,null,3,6]
Output: false
Explanation: The root node's value is 5 but its right child's value is 4.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isValidBST(self, root: TreeNode) -> bool:
xmax = float('-inf')
flag, xmax = self.inorder(root, xmax)
return flag
def inorder(self, node, xmax):
if node is not None:
#print(node.val, xmax)
left, xmax = self.inorder(node.left, xmax)
if left and (node.val > xmax):
xmax = node.val
else:
return False, xmax
return self.inorder(node.right, xmax)
else:
return True, xmax