每日OJ题_二叉树dfs④_力扣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
/**
 * 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) {

    }
};

解析代码

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

/**
 * 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;
    }
};

相关推荐

  1. 98. 验证搜索

    2024-02-22 15:58:02       63 阅读
  2. :98. 验证搜索

    2024-02-22 15:58:02       59 阅读
  3. 98验证搜索

    2024-02-22 15:58:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 15:58:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 15:58:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 15:58:02       82 阅读
  4. Python语言-面向对象

    2024-02-22 15:58:02       91 阅读

热门阅读

  1. ThreadLocal内存如何释放

    2024-02-22 15:58:02       64 阅读
  2. excel合并多列单元格并保留数据

    2024-02-22 15:58:02       65 阅读
  3. 数据库三范式

    2024-02-22 15:58:02       54 阅读
  4. 项目总结(ALL)

    2024-02-22 15:58:02       61 阅读
  5. Rust 安装

    2024-02-22 15:58:02       51 阅读
  6. IP分片重组功能的模拟实现

    2024-02-22 15:58:02       48 阅读
  7. 题目 1032: [编程入门]自定义函数之字符串连接

    2024-02-22 15:58:02       46 阅读
  8. 力扣96不同的二叉搜索树详解

    2024-02-22 15:58:02       39 阅读