问题描述:
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
import java.util.Arrays;
public class Judge {
public static boolean judge(int[] Data){
int len = Data.length;
int root = Data[len-1];
int small = -1;
int large = -1;
for(int i=0;i<len; i++){
if(Data[i]>root){
large = i;
}
if(Data[i]<root){
small = i;
}
}
if(small>large){
return false;
}else if(small==-1&&large==-1){
return true;
}
else{
printArray(Data);
System.out.println("Small:"+small+",Lrge:"+large);
int[] smallPart = null;
int[] bigPart = null;
if(small!=-1){
smallPart = new int[small+1];
smallPart = Arrays.copyOfRange(Data, 0, small+1);
}
if(large!=-1){
bigPart = new int[large-small+1];
bigPart = Arrays.copyOfRange(Data, small+1, large+1);
}
if(small==-1){
return judge(bigPart);
}else if(large==-1){
return judge(smallPart);
}else
return judge(smallPart)&&judge(bigPart);
}
}
public static void printArray(int[] data){
for(int i=0; i<data.length; i++){
System.out.print(data[i]+" ");
}
System.out.println();
}
public static void main(String[] args){
int[] data = {5,7,6,9,11,10,8};
System.out.println(judge(data));
}
}