解题思路:

  • 对于每个节点,需要保证其左子树的最大值小于该节点的值,右子树的最小值大于该节点的值。可以使用递归实现。
  • 另外需要注意的是,二叉搜索树中不存在相同的节点值,因此需要保证左子树中所有节点的值都小于当前节点的值,右子树中所有节点的值都大于当前节点的值。

Java 代码实现:

class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, null, null);
    }

    private boolean isValidBST(TreeNode node, Integer min, Integer max) {
        if (node == null) {
            return true;
        }
        // 判断左子树最大值是否小于当前节点的值
        if (min != null && node.val <= min) {
            return false;
        }
        // 判断右子树最小值是否大于当前节点的值
        if (max != null && node.val >= max) {
            return false;
        }
        // 递归判断左右子树
        return isValidBST(node.left, min, node.val) && isValidBST(node.right, node.val, max);
    }
}

时间复杂度:O(n),其中 n 为二叉树的节点数,需要遍历每个节点。

空间复杂度:O(n),需要使用递归栈空间,最坏情况下递归栈的深度为 n

java 给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。

原文地址: http://www.cveoy.top/t/topic/fI7N 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录