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

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

描述

剑指offer JZ33 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。
数据范围: 节点数量 0≤n≤1000 ,节点上的值满足 1≤val≤105保证节点上的值各不相同
提示:
1.二叉搜索树是指父亲节点大于左子树中的全部节点,但是小于右子树中的全部节点的树。
2.该题我们约定空树不是二叉搜索树
3.后序遍历是指按照 “左子树-右子树-根节点” 的顺序遍历

方法:逆序遍历+栈

思路:
后序遍历的顺序是:左子树 —> 右子树 —> 根节点。那么其逆序便为:根节点 —> 右子树 —> 左子树。我们逆序遍历,如果是后一个节点大于前一个节点,说明后一个节点是前一个节点的右节点。并且我们每遍历一个节点就将其压入栈中。当我们发现后一个节点小于前一个节点,说明前一个节点没有右节点了,并且后一个节点是前一个节点(或者前一个节点的父节点)的左节点,那么我们就通过栈找到后一个节点的父节点,并且以后的节点都只能比这个节点小。
具体实现及注释:

import java.util.*;
public class Solution {

   public boolean VerifySquenceOfBST(int [] sequence) {
       int length = sequence.length;
       //空树不是二叉搜索树
       if (length == 0) return false;
       //实例化栈
       Deque<Integer> stack = new ArrayDeque<>();
       //初始化根节点,因为树中最大值为100000,所以初始化一个最大虚拟值,相当于把原树的根节点作为此虚拟节点的左节点。
       int rootValue = 100001;
       for (int i = length-1; i >= 0; i--) {
           int curValue = sequence[i];
           //因为rootValue存的是根节点的值,而curValue一定在其左子树,所以当curValue大于rootValue时,说明其不是二叉搜索树。
           if (curValue > rootValue) return false;
           //当curValue小于其前一个节点时,说明curValue不是其前一个节点的右节点,我们通过栈找到curValue的父节点,并更新rootValue
           while (!stack.isEmpty() && curValue < stack.peek()) {
               rootValue = stack.pop();
           }
           stack.push(curValue);
       }
       return true;
   }
}

http://www.kler.cn/a/391025.html

相关文章:

  • MySQL Workbench导入数据比mysql命令行慢
  • Flink_DataStreamAPI_输出算子Sink
  • Gurobi学术版+Anaconda安装步骤
  • kettle开发-Day43-数据对比
  • GitLab实现 HTTP 访问和 SMTP 邮件发送
  • 高效运维:构建全面监控与自动化管理体系
  • 「QT」QT5程序设计专栏目录
  • 深入剖析输入URL按下回车,浏览器做了什么
  • jmeter常用配置元件介绍总结之后置处理器
  • 力扣 LeetCode 19. 删除链表的倒数第N个结点(Day2:链表)
  • FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介,结构体,函数
  • Oracle Or子句
  • 网络安全名词解释
  • FPGA 第二讲 初始FPGA
  • 数据分析那些事儿——关于A/B实验
  • 【LeetCode】【算法】34. 在排序数组中查找元素的第一个和最后一个位置
  • 微信小程序的云开发
  • 13、DHCP和FTP协议
  • 利用AI制作《职业生涯规划PPT》,10分钟完成
  • 【Linux】————信号
  • leetcode21:合并两个有序列表
  • [Linux]IO多路转接(上)
  • 微波无源器件 OMT1 一种用于倍频程接收机前端的十字转门四脊正交模耦合器(24-51GHz)
  • Java-03
  • SQL50题
  • ubuntu 20.04 NVIDIA驱动、cuda、cuDNN安装