📜  检查二叉树是否是BST:简单有效的方法(1)

📅  最后修改于: 2023-12-03 14:55:44.214000             🧑  作者: Mango

检查二叉树是否是BST:简单有效的方法

二叉搜索树(Binary Search Tree, BST)是一种常见的二叉树结构,它具备以下性质:

  1. 左子树上所有节点的值都小于根节点的值
  2. 右子树上所有节点的值都大于根节点的值
  3. 左右子树仍然是二叉搜索树

在实际开发中,我们经常需要判断给定的二叉树是否满足BST的性质。简单有效的方法是通过遍历二叉树,判断每个节点的值是否满足BST的规则。

以下是一个使用递归进行检查的示例代码片段:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def is_bst(root):
    return is_bst_helper(root, float('-inf'), float('inf'))

def is_bst_helper(node, lower, upper):
    if node is None:
        return True

    if node.val <= lower or node.val >= upper:
        return False

    return is_bst_helper(node.left, lower, node.val) and is_bst_helper(node.right, node.val, upper)

代码中使用了一个辅助函数 is_bst_helper,它接收当前节点以及其允许的最小值(lower)和最大值(upper)作为参数。在遍历到每个节点时,我们检查其值是否在允许范围内,并递归地检查左右子树。如果遇到任何一个节点的值不满足BST的规则,就返回 False,否则整个二叉树都是BST。

这种方法的时间复杂度为O(n),其中n为二叉树中节点的总数,因为我们需要遍历每个节点。空间复杂度为O(n),因为在最坏情况下,递归栈的深度将是n,即二叉树的高度。

除了递归的方式,我们还可以使用迭代的方式进行验证。这种方法使用栈来模拟递归的过程,稍微复杂一些,但也可以实现相同的功能。

希望以上代码片段和解释对您有帮助!