给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:

输出: true

示例 2:

输入:

输出: false
解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5,但是其右子节点值为 4。

Python 解答:
1.递归判断

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        def isTrue(root, lvalue, rvalue):
            if not root:
                return True
            elif lvalue < root.val < rvalue:
                if not root.left and not root.right:
                    return True
                elif not root.left and root.right:
                    return isTrue(root.right, root.val, rvalue)
                elif root.left and not root.right:
                    return isTrue(root.left, lvalue, root.val)
                else:
                    return isTrue(root.left, lvalue, root.val) and isTrue(root.right, root.val, rvalue)     
            else:
                return False
        return isTrue(root, float('-inf'), float('inf'))

2.中序遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        pre = float('-inf')
        flag = True
        def inOrder(root):
            nonlocal pre, flag
            if not root or not flag:
                return
            inOrder(root.left)
            if root.val <= pre:
                flag = False
            pre = root.val
            inOrder(root.right)
        inOrder(root)
        return flag
最后修改日期: 2021年8月1日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。