每日OJ题_二叉树dfs④_力扣98. 验证二叉搜索树

目录

[力扣98. 验证二叉搜索树](#力扣98. 验证二叉搜索树)

解析代码


力扣98. 验证二叉搜索树

98. 验证二叉搜索树

难度 中等

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

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

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

示例 1:

复制代码
输入:root = [2,1,3]
输出:true

示例 2:

复制代码
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

  • 树中节点数目范围在[1, 10^4] 内
  • -2^31 <= Node.val <= 2^31 - 1
cpp 复制代码
/**
 * 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 isValidBST(TreeNode* root) {

    }
};

解析代码

一颗二叉搜索树中序遍历一定是有序的:

cpp 复制代码
/**
 * 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 {
    long prev = LONG_MIN; // 存储中序遍历前驱的值
public:
    bool isValidBST(TreeNode* root) {
        if(root == nullptr)
            return true;

        bool left = isValidBST(root->left); // 判断左子树
        if(left == false) // 剪枝
            return false;

        bool flag = false;
        if(root->val > prev) // 判断自己
        {
            flag = true;
        }
        if(flag == false) // 剪枝
            return false;
            
        prev = root->val;
        bool right = isValidBST(root->right); // 判断右子树
        return left && right && flag;
    }
};
相关推荐
曦樂~9 小时前
Cpp面筋
c语言·c++
道尔柯南10 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
Dream it possible!12 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊13 小时前
算法之双指针系列(一)
算法·leetcode
十二13 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
Pniubi15 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH15 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi15 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
zjxtxdy17 小时前
C++面向对象程序开发-类与对象
开发语言·c++
東隅已逝,桑榆非晚18 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法