java 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果

来源:互联网 发布:原创诗歌知乎 编辑:程序博客网 时间:2024/05/15 12:27
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
    8
   / /
  6  10
/ / / /
5 7 9 11
因此返回true。

如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。

最后一个元素为根,左子树都比根小,右子树都比根大,递归判断。右子树有比根小的元素则返回false

public class IsPostorderResult {public boolean isPostorderResult(int[] a,int n){return helper(a,0,n-1);}private boolean helper(int[] a,int s,int e){if(a.length==0||s>e)return false;if(s==e) return true;int root=a[e];int i;for(i=s;i<e;i++){//判断左子树if(a[i]>root){break;}}int right=i;if(!helper(a, right, e-1)){//右子树 返回false的话return false;}for(;i<e;i++){//判断右子树if(a[i]<root){return false;}}return helper(a, s, right-1);}public static void main(String[] args) {IsPostorderResult iResult=new IsPostorderResult();int a[]={5,7,6,9,11,10,8};boolean flag=iResult.isPostorderResult(a, a.length);System.out.println(flag);a=new int[]{7,4,6,5};flag=iResult.isPostorderResult(a, a.length);System.out.println(flag);}}


原创粉丝点击