返回

剖析二叉搜索树的验证规则,破解 LeetCode 98 难题

闲谈

二叉搜索树的定义

二叉搜索树(BST)是一种特殊的二叉树,其节点具有以下属性:

  • 每个节点的值都大于其左子树中所有节点的值。
  • 每个节点的值都小于其右子树中所有节点的值。

验证二叉搜索树的算法

验证二叉搜索树的算法采用递归的方式,从根节点开始遍历整个树。算法遵循以下步骤:

  1. 检查节点的左子树: 确保左子树中的所有节点值都小于当前节点的值。
  2. 检查节点的右子树: 确保右子树中的所有节点值都大于当前节点的值。
  3. 递归调用: 对左右子树分别进行验证。

算法步骤示例

假设我们有一个二叉搜索树,其中根节点的值为 10,左子树包含值为 5 的节点,右子树包含值为 15 的节点。

  • 检查根节点(10): 左右子树为空,满足条件。
  • 检查左子树(5): 左子树为空,满足条件。
  • 检查右子树(15): 右子树为空,满足条件。

通过递归地检查每个节点及其左右子树,算法可以验证整个二叉搜索树是否满足 BST 的定义。

技术指南:Python 示例代码

def isValidBST(root):
    if not root:
        return True
    
    left_max = get_max(root.left)
    right_min = get_min(root.right)
    
    return left_max < root.val < right_min and \
        isValidBST(root.left) and \
        isValidBST(root.right)

def get_max(node):
    if not node:
        return float('-inf')
    
    max_val = node.val
    while node.right:
        node = node.right
        max_val = node.val
    
    return max_val

def get_min(node):
    if not node:
        return float('inf')
    
    min_val = node.val
    while node.left:
        node = node.left
        min_val = node.val
    
    return min_val

结语

掌握二叉搜索树的验证算法不仅可以解决 LeetCode 98 难题,还能加深你对树形结构和算法设计的理解。通过剖析 BST 的定义和验证步骤,你可以自信地解决各种与二叉搜索树相关的算法问题。