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

剑指offer32_二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列


输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。

如果是则返回true,否则返回false。

假设输入的数组的任意两个数字都互不相同。

数据范围

数组长度 [ 0 , 1000 ] [0,1000] [0,1000]

样例
输入:[4, 8, 6, 12, 16, 14, 10]输出:true

算法思路 :
  1. 基本思想

    • 利用后序遍历特性:序列最后一个元素为根节点
    • 递归验证左子树所有节点 < 根节点 < 右子树所有节点
  2. 验证过程

    • 基准条件:当子序列长度 ≤ 1 时返回true
    • 划分左右子树
      1. 定位第一个≥根节点的元素作为分界点
      2. 验证右子树部分全部>根节点
    • 递归验证
      • 左子树区间[l, k-1]
      • 右子树区间[k, r-1](排除末尾根节点)
  3. 实现特点

    • 使用类成员变量seq避免参数传递
    • 原地划分不需要额外空间
复杂度类型分析结果说明
时间复杂度O(n²)最坏情况下(链式树)需要n+(n-1)+…+1次比较
空间复杂度O(n)递归栈深度最大为树高,最坏情况下(链式树)为O(n)
  • 最优情况(平衡二叉树):O(nlogn)
  • 最坏情况(单支树):O(n²)
  • 平均情况:O(nlogn)
class Solution {
public:vector<int> seq;bool verifySequenceOfBST(vector<int> sequence) {seq = sequence;return dfs(0, sequence.size() - 1);}bool dfs(int l, int r){if(l >= r) return true;int root = seq[r];int k = l;while(k < r && seq[k] < root) k ++;for(int i = k + 1; i < r; i ++){if(seq[i] < root) return false;}return dfs(l, k - 1) && dfs(k, r - 1);}
};

算法优化方向 :

  1. 单调栈解法:可优化至O(n)时间复杂度
  2. 剪枝策略:当发现非法右子树节点时立即终止递归
  3. 迭代实现:用栈替代递归可优化空间复杂度为O(1)(尾递归优化)
http://www.xdnf.cn/news/1058707.html

相关文章:

  • 新发布的一款使用ReactNative新架构加载Svga动画的开源插件[android/ios]
  • 数据结构——选择题—查漏补缺
  • 【unitrix】 3.0 基本结构体(types.rs)
  • 二、OpenCV的第一个程序
  • Uniapp H5端SEO优化全攻略:提升搜索引擎排名与流量
  • 结合 STM32CubeMX 使用 FreeRTOS 实时操作系统
  • 【ClipPal】推荐一个非常好用的粘贴板记录工具
  • 侧信道分析中的简单模板攻击(TA)Python实现(带测试)
  • 【web应用】Vue 3 中实现 Chart.js 折线图:详细指南与最佳实践
  • 14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
  • 基于CNN的FashionMNIST数据集识别6——DenseNet模型
  • 基于深度学习的智能文本摘要系统:技术与实践
  • Uniapp性能优化全面指南:从原理到实践
  • GNU Octave 基础教程(1):在 Ubuntu 22.04 和 Windows 11 上的安装指南
  • 【Linux】UDP与TCP协议
  • 电路图识图基础知识-普通卧式镗床识图(三十)
  • 深度体验KingbaseES在线平台:从零掌握企业级数据库实战(附架构图+代码案例)
  • Python基础学习框架(总周期:8周)
  • 九日集训第六天
  • 1572. 矩阵对角线元素的和
  • 计算机网络学习笔记:TCP流控、拥塞控制
  • 大模型知识库RAG框架,比如LangChain、ChatChat、FastGPT等等,哪个效果比较好
  • 前端开发面试题总结-vue2框架篇(三)
  • 安装谷歌vue开发工具插件devtools支持vue2
  • CentOS7 安装最新版 Docker
  • 【RocketMQ 生产者和消费者】- 消费者重平衡(1)
  • 《开窍》读书笔记9
  • 为什么要进行行为验证,行为验证方式有哪些?
  • 什么是数据清洗?数据清洗有哪些步骤?
  • FPGA 43 ,UDP 协议详细解析( FPGA 中的 UDP 协议 )