LeetCode每日1题--验证二叉搜索树

94 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

前言

算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image-20220705103735001

刷题网站

代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!

画图软件

OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!

笔记软件

Typoral

题目

image.png

解析

今天还是二叉搜索树,只不过这次我们要判断给出的树是不是满足二叉搜索树的需求 让我们在来回顾一下满足二叉搜索树的条件

  1. 若它的左子树不为空,则左子树上所有结点小于根节点的值
  2. 若它的右子树不为空,则右子树上所有结点大于根节点的值

递归三部曲

这里依然可以用递归来判断是否满足二叉搜索树

整体思路是通过中序遍历得到元素的数值,然后判断是否是递增的

  1. 确定递归的参数和返回值

判断是否是二叉搜索树,自然传入的参数就是该树的根节点

public boolean isValidBST(TreeNode root)
  1. 确定递归终止的条件

注意:空树也是二叉搜索树

if (root == null) {
    return true;
}
  1. 确定单层递归的逻辑

这里通过中序遍历的顺序拿节点的值和一个max节点比较,一直更新这个节点

如果说在中序遍历的过程中,如果max不为空而且max节点的值大于下一个节点的值了那就说明不是二叉搜索树!


boolean left = isValidBST(root.left);

if(max != null && max.val >= root.val){
    return false;
}

max = root;

boolean right = isValidBST(root.right);

最后我们返回left和right的与值,即可判断该树是不是二叉搜索树

一图胜千言

太简单了,没必要画图了

自己可以看着代码,手动想象一下

完整代码

class Solution {
    // 递归
    TreeNode max;
    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        boolean left = isValidBST(root.left);

        if(max != null && max.val >= root.val){
            return false;
        }

        max = root;
        
        boolean right = isValidBST(root.right);

        return left && right;
    }
}