描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
2
/ \
1 3
输出: true
示例 2:
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
Python
易懂
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# recursively
def isValidBST(self, root):
Min, Max = -(1<<31)-1, (1<<31)
return self.helper(root, Min, Max)
def helper(self, root, Min, Max):
if not root: # root is None
return True
if not root.left and not root.right: # root has no leaf
if Min < root.val < Max:
return True
else:
return False
if not root.left and root.right: # root only has right leaf
return root.val < root.right.val and self.helper(root.right, root.val, Max)
elif root.left and not root.right: # root only has left leaf
return root.val > root.left.val and self.helper(root.left, Min, root.val)
else: # root has both left and right leaves
return root.left.val < root.val < root.right.val and self.helper(root.left, Min, root.val) and self.helper(root.right, root.val, Max)