验证二叉搜索树(力扣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;
    }
};
相关推荐
山居秋暝LS33 分钟前
目标跟踪之sort算法(3)
python·算法·目标跟踪·sort
siy23335 小时前
[c语言日寄]assert函数功能详解
c语言·开发语言·笔记·学习·算法
不停留5 小时前
贪心算法-跳跃游戏
前端·javascript·数据结构·算法·贪心算法
Ning_.6 小时前
LeetCode 349题解:两个数组的交集
数据结构·算法·leetcode
xiao--xin6 小时前
LeetCode100之全排列(46)--Java
java·算法·leetcode·回溯
_周游6 小时前
【数据结构】_链表经典算法OJ(力扣版)
数据结构·leetcode·链表
滨HI06 小时前
18. 四数之和【力扣】——两层循环后的双指针法
数据结构·c++·算法·leetcode·职场和发展
像污秽一样7 小时前
AI刷题-蛋糕工厂产能规划、优质章节的连续选择
数据结构·c++·算法·dp·队列
_GR8 小时前
2015年蓝桥杯第六届C&C++大学B组真题及代码
c语言·数据结构·c++·算法·贪心算法·蓝桥杯·动态规划
柠石榴8 小时前
【算法】快速排序2
c++·算法·排序算法