当前位置: 首页 > 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),因为需要存储递归调用的栈。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • STM32CUBEIDE使用技巧
  • docker——基础知识
  • 08_第八章 微头条项目开发
  • Spring系统学习 - Bean的作用域
  • 震坤行坤合供应链荣获“2024 LOG低碳供应链物流-最具影响力品牌商”
  • 快捷键专栏 IDEA、Navicat、电脑、Excle、Word等
  • SpringCash
  • Java--数组小结
  • 【Spine学习06】之IK约束绑定,制作人物待机动画,图表塞贝尔曲线优化动作
  • Java之等待唤醒方法
  • 如何成为一名黑客?小白必学的12个基本步骤
  • 【设计模式之组合模式 -- C++】
  • 在项目中使用Volta控制node版本
  • 【css】html 标初始化CSS样式(初学者必看)
  • VUE之重定向redirect
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java到底能干嘛?
  • Java深入 - 深入理解Java集合
  • JSDuck 与 AngularJS 融合技巧
  • Linux快速复制或删除大量小文件
  • Markdown 语法简单说明
  • October CMS - 快速入门 9 Images And Galleries
  • PAT A1120
  • rabbitmq延迟消息示例
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • V4L2视频输入框架概述
  • Vim Clutch | 面向脚踏板编程……
  • vue 配置sass、scss全局变量
  • 动态魔术使用DBMS_SQL
  • 基于组件的设计工作流与界面抽象
  • 检测对象或数组
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 手写双向链表LinkedList的几个常用功能
  • 通过几道题目学习二叉搜索树
  • 第二十章:异步和文件I/O.(二十三)
  • ​力扣解法汇总946-验证栈序列
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # Java NIO(一)FileChannel
  • #1015 : KMP算法
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (web自动化测试+python)1
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (六)Flink 窗口计算
  • (六)Hibernate的二级缓存
  • (论文阅读40-45)图像描述1
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (四) 虚拟摄像头vivi体验
  • (一) 初入MySQL 【认识和部署】
  • (一)WLAN定义和基本架构转
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .form文件_SSM框架文件上传篇