问题描述:
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回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)); } }