leetcode 98 验证二叉搜索树

一、题目描述

二、解题思路

整体思路

二叉搜索树的中序遍历序列是单调递增的,我们可以根据这个原则来判断当前的二叉树是否为二叉搜索树。由于要借助中序遍历的方法,所以我们借助递归来解决这个问题。

具体思路

考虑到空间的开销,我们无需申请数组来寄存中序遍历的序列,可以设置一个全局变量pre,来记录前一个数值,辅助判断。

**(1)函数功能:**isValidBST函数用于判断以root为根节点的二叉树是否为二叉搜索树;

**(2)递归出口:**当root为空节点时,直接返回true

(3)函数体:

**<1>处理左子树,判断左子树是否为二叉搜索树。**当左子树不为二叉搜索树,直接返回false,进行左剪枝;

**<2>处理当前节点。**判断当前节点的值是否大于pre,更新pre的值;

**<3>处理右子树,判断右子树是否为二叉搜索树。**当右子树不为二叉搜索树,直接返回false,进行右剪枝。

**(4)**返回left&&cur&&right即可。

三、代码实现

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 pre=LONG_MIN;
public:
    bool isValidBST(TreeNode* root) {
       //边界处理
       if(root==nullptr) return true;
       //处理左子树
       bool left=isValidBST(root->left);
       if(left==false) return false;//左剪枝
       //处理本身
       bool cur=true;
       if(root->val<=pre) cur=false;
       pre=root->val;
        //处理右子树
        bool right=isValidBST(root->right);
        if(right==false) return false;//右剪枝

        return left&&cur&&right;
    }
};
相关推荐
月光船幽幽1 分钟前
四层公理框架驱动AI健康诊断
人工智能·python·科技·算法·安全
zmzb01035 分钟前
C++课后习题训练记录Day176
开发语言·c++
王维同学8 分钟前
跨位数进程的映像、命令行与环境块读取
c++·windows·安全
Rabitebla10 分钟前
C++ STL 之 set 详解:从底层红黑树到实际应用
开发语言·数据结构·c++·算法·leetcode
liulilittle20 分钟前
无锁多生产者多消费者队列的工程实现剖析——算法、内存模型与性能
算法·多线程·并发·无锁·mpmc·lock-free
郝学胜-神的一滴24 分钟前
力扣 692:巧用小顶堆高效求解前K个高频单词
java·数据结构·python·程序人生·算法·leetcode·职场和发展
ychqsq31 分钟前
103.样书
经验分享·职场和发展
科学实验家34 分钟前
贪心算法:分饼干
算法·贪心算法
誰能久伴不乏39 分钟前
深入解析 C++ STL 底层原理:从设计哲学到内存收割机
c++·架构·stl
额,不知道写啥。1 小时前
题解:P16710 愿望
数据结构·算法