题目内容
https://leetcode-cn.com/problems/validate-binary-search-tree/
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater thanthe node's key.
- Both the left and right subtrees must also be binary search trees.
Example 1: Input: 2 / \ 1 3 Output: true Example 2: 5 / \ 1 4 / \ 3 6 Output: false Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value is 5 but its right child's value is 4.
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
题目思路
这道题目遵循搜索树的要求即可。唯一值得注意的是,防止出现局部符合整体不符合的情况。比如右侧的一个左侧分直接点虽然数值小于上一层根节点,但是却小于顶部的根节点。所以必须添加一个隐含约束,使得必须在小于和大于之间。
程序代码
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
return self.search(root,-2**32,2**32-1)
def search(self,root,small,large):
if not root:
return True
if root.val>=large or root.val<=small:
return False
return self.search(root.left,small,root.val) and self.search(root.right,root.val,large)