C++递归实现验证⼆叉搜索树

C++递归实现验证⼆叉搜索树

文章目录

题目链接

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

题目描述

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

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

  • 节点的左⼦树只包含⼩于当前节点的数。
  • 节点的右⼦树只包含⼤于当前节点的数。
  • 所有左⼦树和右⼦树⾃⾝必须也是⼆叉搜索树。

解题思路

利用中序遍历;

后序遍历按照左⼦树、根节点、右⼦树的顺序遍历⼆叉树的所有节点,通常⽤于⼆叉搜索树相关题⽬。

算法思路:

如果⼀棵树是⼆叉搜索树,那么它的中序遍历的结果⼀定是⼀个严格递增的序列。

因此,我们可以初始化⼀个**⽆穷⼩** 的全区变量,⽤来记录中序遍历过程中的前驱结点 。那么就可以在

中序遍历的过程中,先判断是否和前驱结点构成递增序列,然后修改前驱结点为当前结点,传⼊下⼀

层的递归中。

算法流程:

  1. 初始化⼀个全局的变量**prev,⽤来记录中序遍历过程中的前驱结点的 val**;

  2. 中序遍历的递归函数中

a.设置递归出⼝:root==nullptr的时候,返回 true

b. 先递归判断左⼦树是否是⼆叉搜索树,⽤**retleft**标记;

c.然后判断当前结点是否满⾜⼆叉搜索树的性质,⽤**retcur**标记:

  • 如果当前结点的**val⼤于 prev,说明满⾜条件, retcur改为 true**;
  • 如果当前结点的val⼩于等于**prev,说明不满⾜条件, retcur改为 false**;

d.最后递归判断右⼦树是否是⼆叉搜索树,⽤**retright**标记;

  1. 只有当**retleft、retcur和retright都是 true的时候,才返回 true**。

C++算法代码:

cpp 复制代码
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 cur = false;
if(root->val > prev)
cur = true;
// 剪枝
if(cur == false) return false;
prev = root->val;
bool right = isValidBST(root->right);
return left && right && cur;
}
};
相关推荐
AI行业学习8 分钟前
2026 版 Notepad++ 完整图文安装指南|官方渠道无捆绑,一键切换中文界面
开发语言·人工智能·python·html·notepad++
汉克老师17 分钟前
GESP2026年6月认证C++一级( 第一部分选择题(8-15))精讲
c++·continue·运算符·while·break·gesp1级·模运算
鹏易灵21 分钟前
C++——7.类与对象,掌握封装、继承、多态.详解
开发语言·c++·算法
水无痕simon23 分钟前
5 多表操作
java·开发语言·数据库
初阳78524 分钟前
【Qt】系统相关(2)——文件
开发语言·qt
大P哥阿豪26 分钟前
Go panic & recover:深入Go语言的异常拯救之道
开发语言·后端·golang·go
Mortalbreeze27 分钟前
深入 Linux 线程机制(三):线程互斥——竞争条件与互斥锁的本质
linux·运维·服务器·c++·算法
汉克老师35 分钟前
GESP2026年6月认证C++一级( 第一部分选择题(1-7))精讲
c++·运算符·表达式·赋值·gesp1级·输入与输出·单循环
ALex_zry35 分钟前
C++26 Freestanding 库扩展详解:无操作系统也能用标准库
java·jvm·c++
码上有光1 小时前
c++:map和set的底层实现
android·java·c++·set·map