- 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
2
/
1 3
输出: true
示例 2:
输入:
5
/
1 4
/
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
思想:
树的问题一般都是递归,所以首先递归
递归函数先写结束条件,就是叶子节点
然后 : 判断每一个节点当中的值是不是在合理的区间里面,在的话,递归判断左子树和右子树
思想2:
利用二叉排序树的性质,中序遍历是排序的
中序遍历可以写成递归和非递归的形式
这次都尝试一下
# 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:
max_value = sys.maxsize
min_value = -sys.maxsize
def func(root: TreeNode, min_value, max_value):
if root:
if min_value < root.val < max_value:
return func(root.left, min_value, root.val) and \
func(root.right, root.val, max_value)
else:
return False
return True
return func(root, min_value, max_value)