验证二叉搜索树(力扣98)

根据二叉搜索树的特性,我们使用中序遍历,保证节点按从小到大的顺序遍历。既然要验证,就是看在中序遍历的条件下,各个节点的大小关系是否符合二叉搜索树的特性。双指针法和适合解决这个问题,一个指针指向当前节点,另一个指针指向前一个节点(指的是按照中序遍历顺序的前一个节点),不断后移两个指针,两两进行比较。这只是大致思路,大家可以结合我的代码以及注释加以理解。

代码及注释如下:

复制代码
/**
 * 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:
    TreeNode* pre = NULL;
    //题目属于要验证二叉树的特性,递归函数返回值用布尔类型3比较适合
    bool isValidBST(TreeNode* root) {
        if(root == NULL) return true;
        //递归左子树
        bool judge1 = isValidBST(root -> left);
        if(pre == NULL){
            pre = root;//将pre从空节点移动到叶子结点
        }else{
            if(root -> val > pre -> val){
                pre = root;//后移pre
            }else{
                return false;
            }
        }
        //递归右子树
        bool judge2 = isValidBST(root -> right);
        return judge1 && judge2;
    }
};
相关推荐
有梦想的骇客22 分钟前
书籍将正方形矩阵顺时针转动90°(8)0605
线性代数·算法·矩阵
有梦想的骇客26 分钟前
书籍“之“字形打印矩阵(8)0609
java·算法·矩阵
Chenyu_3101 小时前
12.找到字符串中所有字母异位词
c语言·数据结构·算法·哈希算法
苏三福1 小时前
yolo11-seg ultralytics 部署版本
算法·yolo11
wuqingshun3141594 小时前
蓝桥杯 冶炼金属
算法·职场和发展·蓝桥杯
豪斯有话说5 小时前
C++_哈希表
数据结构·c++·散列表
GSDjisidi5 小时前
日本本社企业直招|Java /cobol/C#/PM/PL/Salesforce/AWS/SAP 等,正社员/個人事業主,高度人才+20 分
职场和发展
jndingxin5 小时前
OpenCV CUDA模块光流计算-----实现Farneback光流算法的类cv::cuda::FarnebackOpticalFlow
人工智能·opencv·算法
编程绿豆侠6 小时前
力扣HOT100之栈:394. 字符串解码
java·算法·leetcode