题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ /
6 10
/ / / /
5 7 9 11
因此返回true。
如果是返回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);
}
}