Leetcode 98 Validate Binary Search Tree

Posted yuyinzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 98 Validate Binary Search Tree相关的知识,希望对你有一定的参考价值。

题目介绍

判断给定二叉树是否为一棵二叉搜索树。

Examples:

    2
   /   1   3

Input: [2,1,3]
Output: true
  
    5
   /   1   4
     /     3   6

Input: [5,1,4,null,null,3,6]
Output: false

Solution

仅仅使用递归判断左子树是否平衡或者右子树是否平衡有可能出现右子树中的值比当前根节点还要小。利用先序遍历,平衡二叉树的结果是一个升序序列,因此,只要判断新增加的节点是否比前一节点大即可。

class Solution(object):
    def isValidBST(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        
        max_val = [float(‘-inf‘)]
        def helpfunc(root):
            if not root:
                return True
            if not helpfunc(root.left):
                return False
            if root.val <= max_val[0]:
                return False
            else:
                max_val[0] = root.val
            if not helpfunc(root.right):
                return False
            return True
        
        return helpfunc(root)

一种更优雅的方式,是采用递归,但是每次传入范围:

class Solution(object):
    def isValidBST(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        min_value, max_value = float(‘-inf‘), float(‘inf‘)
        
        def helpfunc(root, min_value, max_value):
            if not root:
                return True
            if root.val <= min_value or root.val >= max_value:
                return False
                
            return helpfunc(root.left, min_value, root.val) and helpfunc(root.right, root.val, max_value)
        
        return helpfunc(root, min_value, max_value)

以上是关于Leetcode 98 Validate Binary Search Tree的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 98. Validate Binary Search Tree

leetcode 98 - Validate Binary Search Tree

Leetcode 98. Validate Binary Search Tree

leetcode [98]Validate Binary Search Tree

LeetCode 98. Validate Binary Search Tree

[LeetCode_98]Validate Binary Search Tree