leetcode刷题-98验证二叉搜索树

123 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode98-验证二叉搜索树

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。

输入: root = [2,1,3]
输出: true
输入: root = [5,1,4,null,null,3,6]
输出: false
解释: 根节点的值是 5 ,但是右子节点的值是 4

解题思路分析

解法1:

二叉搜索树,主要具备的性质是左叶子节点的所有值要小于根节点的值,同时右叶子节点的所有值要大于根节点的值。因此当判断二叉树是否为二叉搜索树时,不仅要满足当前的父节点的值,还要对上层父节点的值进行关注。因此在比较的过程中,将上方节点的值,也就是节点的范围进行传递。每个节点都会有一个值的范围。只有满足该范围才能继续判断。以此方式进行递归判断即可验证二叉树是否为二叉搜索树。

public boolean isValidBST(TreeNode root) {
    return isValid(root,Long.MIN_VALUE,Long.MAX_VALUE);

}

public boolean isValid(TreeNode node,long lower,long upper){
    if(node == null){
        return true;
    }

    if(node.val <= lower || node.val >= upper){
        return false;
    }else{
        return isValid(node.left,lower,node.val) && isValid(node.right,node.val,upper);
    }
}

复杂度分析

  • 时间复杂度:o(n)
  • 空间复杂度:o(1)

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。