Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >验证二叉树只有35%通过率?搞它

验证二叉树只有35%通过率?搞它

作者头像
热心的大肚皮
发布于 2023-02-28 05:56:33
发布于 2023-02-28 05:56:33
19200
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是热心的大肚皮,皮哥。无意间看到了,力扣上验证二叉搜索树只有35%的通过率,我们就搞专门这种,看看为什么会这么低呢?

看看它的真面目

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

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

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

提示:

  • 树中节点数目范围在[1, 104]
  • -231 <= Node.val <= 231 - 1

盘它

题目信息非常简单,一个二叉树,边界值大家应该不陌生,int的边界值。上篇提到过,递归是处理二叉树的一把利刃。思路有了,不多说,上代码盘它。

round 1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean isValidBST(TreeNode root) {
    return isValid(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
// 采用递归的思路,每一个节点都去比较是否符合要求
private boolean isValid(TreeNode root, int minVal, int maxVal) {
    if (root == null) {
        return true;
    }
    // 二叉树的节点值规则  
    // 左节点 小于上一个节点的值,
    // 右节点 大于上一个节点的值
    if (root.val > minVal && root.val < maxVal) {
        return isValid(root.left, minVal, root.val) 
                  && isValid(root.right, root.val, maxVal);
    } else {
        return false;
    }
}

提交之后,果断成了炮灰,仔细一看原因是-231 <= Node.val <= 231 - 1,原来边界没有处理好,那怎么解决呢,大家不用想了,如果用条件判断边界值,代码会极其冗余,那么int装不下边界,那我换成long呢?

round 2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean isValidBST(TreeNode root) {
    return isValid(root, Long.MIN_VALUE, Long.MAX_VALUE);
}

private boolean isValid(TreeNode root, long minVal, long maxVal) {
    if (root == null) {
        return true;
    }
    if (root.val > minVal && root.val < maxVal) {
        return isValid(root.left, minVal, root.val) && isValid(root.right, root.val, maxVal);
    } else {
        return false;
    }
}

提交之后,果断成功。

总结

给大家个建议,在操作二叉树的时候,可以拆解成每一个节点该如何操作,利用递归的思想。最后留一个思考题,我们递归可以搞定它,那么还有其他的方式吗,前中后三种遍历哪种适合呢?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿日常笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图解LeetCode——98. 验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下:
爪哇缪斯
2023/06/01
2150
图解LeetCode——98. 验证二叉搜索树
【leetcode刷题】T112-验证二叉搜索树
节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。
木又AI帮
2019/07/17
5120
LeetCode:98.验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
Yuyy
2022/06/28
1980
『LeetCode』#1刷题日记
前言 📢 本日记为个人的刷题学习日记,内容非原创,仅为自己复习知识时,能够看得懂自己写的CV的代码,快速理解题意。另外,👍力扣官方的题解很好用,三叶姐nb!!!!! 104. 二叉树的最大深度 ✅ 题意 给你一个二叉树的根结点root,判断该树的深度(层数) 思路 递归 class Solution { public int maxDepth(TreeNode root) { if(root == null) { return 0; // 根节点
客怎眠qvq
2022/11/01
1870
LeetCode98题 验证二叉搜索树(Validate Binary Search Tree)
https://leetcode-cn.com/problems/validate-binary-search-tree/
code随笔
2020/04/14
3470
LeetCode98题 验证二叉搜索树(Validate Binary Search Tree)
Leetcode No.98 验证二叉搜索树
输入: 5 / \ 1 4 / \ 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。
week
2021/11/29
2460
算法:树和图-实战
思路:回到二叉搜索树,当前节点大于左子树,小于右子树。假如此树是二叉搜索树,那么应该满足这种有序的状态。
营琪
2019/11/04
7070
leetcode刷题(21)——98. 验证二叉搜索树
节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1:
老马的编程之旅
2022/06/22
1850
LeetCode98:验证二叉搜索树,居然有这么简单的中等难度,白捡(用时击败100%)
关于LeetCode98 做这道题之前,我反复审题,最后确认:没错,不存在什么坑,这道题确实非常非常简单,然而却被官方定义为中等难度 这一定是送分,白捡一道中等难度题,接下来,一起来轻松愉快的享受解题过程吧 关于题目 题目:98. 验证二叉搜索树 描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树 示例 1: 输入:
程序员欣宸
2022/10/04
2990
LeetCode98:验证二叉搜索树,居然有这么简单的中等难度,白捡(用时击败100%)
golang刷leetcode 二叉树(1)验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4 / \ 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节
golangLeetcode
2022/08/02
2140
98 验证二叉搜索树
和上题一样可以很好的想到递归的思路,左边都是越来越小,右边是越来越大。这个地方容易产生一种错觉。
木瓜煲鸡脚
2021/01/18
4850
98 验证二叉搜索树
验证二叉搜索树
最开始看到这道题的时候,以为是直接判断 node.right.val > node.val 和 node.left.val < node.val 对每个结点是否成立。但是这种是忽略了,二叉搜索树还有一个很重要的特点就是,左子树上所有节点的值均小于它的根节点的值,右子树上所有节点的值均大于它的根节点的值。注意是左子树和右子树所有的节点都满足才行。
木子星兮
2020/07/17
6600
判断是不是一棵二叉搜索树!
题目地址:https://leetcode-cn.com/problems/validate-binary-search-tree/
代码随想录
2021/09/08
4550
判断是不是一棵二叉搜索树!
LeetCode 75 —— 98. 验证二叉搜索树
输入:root = [5,1,4,null,null,3,6] 输出:false 解释:根节点的值是 5 ,但是右子节点的值是 4 。 提示: 树中节点数目范围在[1, 10^4] 内 -2^31 <= Node.val <= 2^31 - 1 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/validate-binary-search-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Regan Yue
2023/07/10
1970
LeetCode 75 —— 98. 验证二叉搜索树
原创 | 手把手刷二叉搜索树(第二期)
我们前文 手把手刷二叉搜索树(第一期) 主要是利用二叉搜索树「中序遍历有序」的特性来解决了几道题目,本文来实现 BST 的基础操作:判断 BST 的合法性、增、删、查。其中「删」和「判断合法性」略微复杂。
labuladong
2021/09/23
3220
互联网经典算法面试题-验证二叉搜索树
大家好,我是来自于华为的程序员小熊。今天给大家带来一道与二叉树相关的面试高频题,这道题在半年内被谷歌、字节、微软和亚马逊等大厂作为面试题,即力扣上的第98题-验证二叉搜索树。
程序员小熊
2022/01/25
2930
互联网经典算法面试题-验证二叉搜索树
图解LeetCode——98. 验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:
爪哇缪斯
2023/09/06
1760
图解LeetCode——98. 验证二叉搜索树
漫画:二叉树系列 第三讲(BST与其验证)
在上一节中,我们分别学习了DFS与BFS。在本节中,我们将继续学习一种特殊的二叉树结构 —— 二叉搜索树(BST)。
程序员小浩
2020/03/31
8880
万字长文!二叉树入门和刷题看这篇就够了!
今天是小浩算法 “365刷题计划” 二叉树入门 - 整合篇。本篇作为入门整合篇,已经砍去难度较大的知识点,所有列出的内容,均为必须掌握。因为很长,写下目录:
程序员小浩
2020/05/08
5720
二叉树的深搜
用户11369558
2024/11/20
1070
二叉树的深搜
相关推荐
图解LeetCode——98. 验证二叉搜索树
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验