剑指 Offer 33. 二叉搜索树的后序遍历序列

题目:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。

参考以下这颗二叉搜索树:

     5
    / \
   2   6
  / \
 1   3

示例 1:

输入: [1,6,3,2,5]
输出: false

示例 2:

输入: [1,3,2,6,5]
输出: true

 

提示:

  1. 数组长度 <= 1000

代码:

复制代码
 1 //二叉搜索树,根节点小于右子树所有节点,大于左子树所有节点
 2 //所以根据这个特性,找到左右子树分界点,左侧都小于根,右侧都大于根
 3 class Solution {
 4     public boolean verifyPostorder(int[] postorder) {
 5         if(postorder.length==0){return true;}
 6         return fun(postorder,0,postorder.length-1);
 7     }
 8     public boolean fun(int[] postorder,int left,int right){
 9         if(left==right){return true;}
10         
11         for(int i=left;i<right;i++){
12                 //寻找出现的第一个右子树节点
13                 if(postorder[i]>postorder[right]){
14                     //在第一个右子树节点后都是右子树节点,即从i开始都大于根节点
15                     for( int t=i+1;t<right;t++){
16                         if(postorder[t]<postorder[right]){return false;}        //小于根false;                
17                     }
18                     //全部都是右子树节点
19                     if(i==left){return fun(postorder,left,right-1);}
20                     //左右子树都有节点
21                     return fun(postorder,left,i-1)&&fun(postorder,i,right-1);
22                 }
23             }
24             //全部都是左子树节点
25              return fun(postorder,left,right-1);       
26     }
27 }
复制代码

 

 

posted @   堤苏白  阅读(46)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示