首页 > 其他分享 >LeetCode——98. 验证二叉搜索树

LeetCode——98. 验证二叉搜索树

时间:2023-10-07 23:44:53浏览次数:32  
标签:upper lower right TreeNode val 二叉 98 LeetCode left

98. 验证二叉搜索树

本次博客,我将记录验证二叉搜索树

由于二叉搜索树的性质是每个节点的左子树中的全部节点数据小于它,而右子树中的全部节点的数据都大于它,因此可以通过这条性质来进行判断

刚上手的时候直接就做了,没考虑到局部最优而非全局最优的情况,遇到这种测试用例直接寄了:

2

是的,虽然3小于6,7大于6,但是3小于5 /(ㄒoㄒ)/~~

解题思路:

由于上述没有考虑到3小于5的情况,因此在实际写代码的过程中,我们在递归的时候可以加入两个参数upper和lower,即上界和下界

我们首先将upper和lower分别设置为LONG_MAX和LONG_MIN,当处理节点5时,我们向下递归,递归5的左子树时将upper设置为5,递归右子树时将lower设置为5,当处理节点6的左子树时,此时lower是5,upper是6,显然3小于lower,不符合二叉搜索树的条件,返回false即可

代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool dfs(TreeNode* t, long long lower, long long upper){
        if(t==nullptr) return true;
        if(lower>=t->val || upper<=t->val) return false;
        return dfs(t->left, lower, t->val) && dfs(t->right, t->val, upper);
    }
    bool isValidBST(TreeNode* root) {
        return dfs(root, LONG_MIN, LONG_MAX);
    }
};

标签:upper,lower,right,TreeNode,val,二叉,98,LeetCode,left
From: https://www.cnblogs.com/Sky6634/p/17747786.html

相关文章

  • LeetCode 13 罗马数字转整数
    LeetCode13罗马数字转整数1.题目地址https://leetcode.cn/problems/roman-to-integer/description/2.题解这道题的解题过程非常简单,具体如下:1.我们需要将罗马数字对应的数,存到一个哈希表中。待用到时,直接使用即可。2.对于正常情况讲(前面......
  • [Leetcode Weekly Contest]365
    链接:LeetCode[Leetcode]2873.有序三元组中的最大值I给你一个下标从0开始的整数数组nums。请你从所有满足i<j<k的下标三元组(i,j,k)中,找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数,则返回0。下标三元组(i,j,k)的值等于(nums[i]......
  • 医院设置(二叉树)
    https://www.luogu.com.cn/problem/P1364这道题是个二叉树(为什么有人要去用dfs,bfs去做??(▔___▔))题目描述这道题让我们在这棵树上修建一家医院,而且让人们到医院的距离和最短,距离和也就是每一个点到医院的距离*这个点上有的人数(就这么简单)首先我们可以建一个结构体,里面存了每一个点......
  • 2023中大厂Android面试八股文合集,GitHub,牛客,leetcode已爆火!
    前言金九银十已过半,不知道大家现在都到哪个阶段了,有没有已经找到心仪的工作的朋友?有没有还没准备好面试在各大平台找资料临时抱佛脚的朋友?或是现在在准备,想要明年金三银四跳槽的朋友?不管你是现在急切找工作还是找资料备战,我都非常推荐你看看我花2个多月从GitHub,牛客,leetcode上为大......
  • Leetcode刷题模版总结
    1.双指针双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。1)滑动窗口若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。 例题:classSolution{public:......
  • 二叉树的性质和特点
    性质1:在二叉树的第i层上至多有2i-1个结点(i>=1)性质2:深度为k的二叉树至多有2k-1个结点(k>=1)性质3:对任何一颗二叉树T,如果其叶子数为n0,度为2的节点数为n2,则n0=n2+1......
  • Leetcode刷题83. 删除排序链表中的重复元素
    给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3] 提示:链表中节点数目在范围 [0,300] 内-100<=Node.val<=100题目数......
  • LeetCode——95. 不同的二叉搜索树 II
    本次博客,我将记录leetcode95,不同的二叉搜索树95.不同的二叉搜索树II本题要求我们从1~n构造不同的二叉搜索树因为好久不碰数据结构了,导致对二叉搜索树的概念十分模糊以下是一些概念:二叉搜索树(BST,BinarySearchTree),也称二叉排序树或二叉查找树。性质如下:1.非空左子树的所......
  • 【思维】【DP】ABC298Ex Sum of Min of Length 题解
    ABC298Ex简单题。因为有\(\min\)不好做,容易想到讨论\(d(i,L)\)和\(d(i,R)\)的大小。令\(p=\text{LCA}(L,R)\),\(dep_L>dep_R,dist=dep_L+dep_R-2\timesdep_p\),\(now\)满足\(dep_L-dep_{now}=\lfloor\dfrac{dist}{2}\rfloor\)则\(L\)一定在......
  • 最优二叉树—哈夫曼(huffman)树
    哈夫曼树又称最优二叉树,是一类带权路径长度最短的二叉树,有着广泛的应用。基本概念权:将树中的结点赋上一个有着某种意义的数值路径:从A结点道B结点所经过的分支序列路径长度:从A结点道B结点所经过的分支数目查找效率平均查找长度(ASL)取决于树的高度ASL=(1+2*2+3)/4=2     ......