1.题目描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:输入:
2
/ \
1 3
输出: true
示例 2:输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
2.解题思路
注意:在判断某一节点时,不仅右子结点要大于该节点,整个右子树的元素都应该大于该节点
上述思路可以用递归法实现。首先将结点的值与上界和下界(如果有)比较。然后,对左子树和右子树递归进行该过程。
作者:LeetCode
链接:https://leetcode-cn.com/problems/validate-binary-search-tree/solution/yan-zheng-er-cha-sou-suo-shu-by-leetcode/
3.代码实现
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
import sys
class Solution(object):
def dfs(self,root,lower,upper):
if not root:
return True
if root.val >= upper or root.val <= lower:
return False
return self.dfs(root.left,lower,root.val) and self.dfs(root.right,root.val,upper)
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
# Python中可以用如下方式表示正负无穷
return self.dfs(root,float("-inf"),float("inf"))