LeetCode||98. 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 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)


你可能感兴趣的:(leetcode,python)