首页 > 其他 > 详细

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

时间:2021-04-03 20:29:46      阅读:16      评论:0      收藏:0      [点我收藏+]

题目:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 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 }

 

技术分享图片

 

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

原文:https://www.cnblogs.com/SEU-ZCY/p/14614325.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!