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 than the 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.
题意:
给定一棵二叉树,检测该二叉树是否是一棵有效的二叉搜索树(BST)。
假定一棵二叉搜索树被如下定义:
1、节点的左子树所有节点的值小于该节点的值;
2、节点的右子树所有节点的值大于该节点的值;
3、左右子树本身也要是二叉搜索树;
代码如下:# 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
"""
def valid(node, lower, upper):
if not node:
return True
if lower is not None and node.val <= lower:
return False
if upper is not None and node.val >= upper:
return False
return valid(node.left, lower, node.val) and valid(node.right, node.val, upper)
return valid(root, None, None)