Featured image of post Validate Binary Search Tree

Validate Binary Search Tree

98. 验证二叉搜索树

分析

  1. 二叉搜索树的性质
    • 对于任意节点,其左子树所有节点值均小于该节点值,右子树所有节点值均大于该节点值
  2. 递归验证子树
    • 每次检查当前节点是否满足范围条件 [l, r]
      • 如果当前节点值小于等于 l 或大于等于 r,直接返回 false
    • 对左子树递归验证,更新上界为当前节点值
    • 对右子树递归验证,更新下界为当前节点值
  3. 递归终止条件
    • 当节点为 nullptr 时,返回 true,表示空子树有效

时间复杂度

每个节点只访问一次,时间复杂度为 O(n),其中 n 为节点数

空间复杂度

递归深度由树的高度决定,空间复杂度为 O(h),其中 h 为树的高度

  • 最坏情况:链式结构,O(n)
  • 最好情况:平衡二叉树,O(logn)

C++代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Solution
{
public:
    bool isValidBST(TreeNode* root)
    {
        // 初始范围设为 LONG_MIN 到 LONG_MAX
        return dfs(root, LONG_MIN, LONG_MAX);
    }

    bool dfs(TreeNode* root, long l, long r)
    {
        if (!root) return true; // 空节点为有效子树
        // 检查当前节点值是否在合法范围内
        if (l >= root->val || r <= root->val)
            return false;
        // 递归检查左子树和右子树
        return dfs(root->left, l, root->val) && dfs(root->right, root->val, r);
    }
};
Built with Hugo
Theme Stack designed by Jimmy