当前位置: 首页 > news >正文

181.二叉树:验证二叉树(力扣)

代码解决

/*** 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 = nullptr;bool isValidBST(TreeNode* root) {// 如果根节点为空,说明是一棵空树,返回trueif(root == nullptr) return true;// 遍历左子树bool left = isValidBST(root->left);// 如果当前节点的值小于等于中序遍历的前一个节点值(pre)if(pre != nullptr && pre->val >= root->val)return false; // 不满足BST定义,返回false// 更新前一个节点为当前节点pre = root;// 继续遍历右子树bool right = isValidBST(root->right);// 返回左右子树是否都满足BST的结果return left && right;}
};

代码使用了递归的方法。主要思路是从根节点开始,递归地检查左右子树。在递归过程中,使用一个全局变量 pre 来记录中序遍历过程中的前一个节点,以确保每个节点的值都大于前一个节点的值。

这里简要解释一下代码的工作流程:

  1. 定义一个全局变量 pre 用于记录中序遍历过程中的前一个节点。
  2. 定义一个辅助函数 isValidBST,它接受当前节点作为参数。
  3. 首先检查当前节点是否为空,如果是,返回 true
  4. 递归地检查左子树,并返回其结果。
  5. 如果当前节点的值小于等于中序遍历的前一个节点值 pre,返回 false
  6. 更新 pre 为当前节点。
  7. 递归地检查右子树,并返回其结果。
  8. 返回左右子树都满足条件的布尔值。

这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是树中节点的数量。空间复杂度也是 O(n),因为需要存储递归调用的栈。

http://www.lryc.cn/news/372166.html

相关文章:

  • 陪诊小程序开发,陪诊师在线接单
  • 【全开源】Java无人共享棋牌室茶室台球室系统JAVA版本支持微信小程序+微信公众号
  • 2024-6-10-zero shot,few shot以及无监督学习之间的关系是什么
  • C语言|十进制数转换任意进制数
  • 驱动开发(二):创建字符设备驱动
  • Golang:使用时会遇到的错误及解决方法详解
  • r语言数据分析案例25-基于向量自回归模型的标准普尔 500 指数长期预测与机制分析
  • 解决使用Jmeter进行测试时出现“302“,‘‘401“等用户未登录的问题
  • MySql通过 Procedure 循环删除数据
  • Spring Boot 的启动原理、Spring Boot 自动配置原理
  • 不会开发的你也能管理好企业漏洞,开源免费工具:洞察(insight II)
  • java实现两个不同对象的集合复制
  • bind failed: Address already in use
  • LabVIEW结构体内部缺陷振动检测
  • RK3568技术笔记六 新建 Ubuntu Linux 虚拟机
  • Web前端博客模板下载:一站式解决方案与深度探索
  • Docker部署常见应用之大数据实时计算引擎Flink
  • python使用os.getcwd()获取当前路径不正确
  • pycharm终端pip安装模块成功但还是显示找不到 ModuleNotFoundError: No module named
  • iptables教程
  • 破局外贸企业海外通邮难题,U-Mail邮件中继有绝招
  • 支持向量机(SVM): 从理论到实践的指南(2)
  • PDF格式分析(八十六)——修订注释(Redaction)
  • 【python】flask中Session忽然取不到存储内容怎么办?
  • 05-腾讯云Copilot及 向量数据库AI套件介绍
  • 软件版本库管理工具
  • LVS负载均衡集群企业级应用实战-LVS/NAT模式(三)
  • 在Spring中如何手动开启事务(使用编程式事务)
  • cv的优势
  • 基于某评论的TF-IDF下的LDA主题模型分析