给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
本题具有最优子结构,想要整棵树都是二叉搜索树,那左子树,右子树都要是二叉搜索树。
直接递归
注意:
1. 二叉搜索树的最右左节点<最左右节点,想要在递归时保有这两个变量,就要增加 upper,lower 上界下界。
代码:
# 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:
if not root: return True
return self.helper(root,float('inf'),float('-inf'))
def helper(self,node,upper,lower):
if not node:
return True
if (not node.left) and (not node.right):
return True
if self.helper(node.left,node.val,lower) and self.helper(node.right,upper,node.val):
if (not node.left or lower<node.left.val < node.val ) and (not node.right or node.val<node.right.val<upper):
return True
else:
return False
else:
return False