题目:
输入一个整数数组,判断该数组是不是某二叉排序树的后序遍历。如果是返回true,否则返回false。假设该数组 任意两个数都不相同。
输入:
二叉搜索树后序遍历序列:7,6,4,5
输出:
false
解题思路:
二叉搜索树的后续遍历序列,往往序列中最后一个数字是根节点的值,因此,序列可以分为两部分,一部分比根节点小的为左子树,比根节点大的为右子树。我们接下来用同样的方法来确定子序列的树的结构。
Java实现代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr={7,4,6,5};
System.out.println(SquenceofBST(arr,0, 4));
}
static boolean SquenceofBST(int[] arr,int start,int length){
if(arr==null || length<=0){
return false;
}
int root=length-1;
int i;
for(i=0;i<root;i++){
if(arr[i]>arr[root]){
break;
}
}
int j=i;
for(;j<root;j++){
if(arr[j]<arr[root])
return false;
}
boolean left=true,right=true;
//对左子树进行递归判断
if(i>0)
left=SquenceofBST(arr, 0,i);
//对右子树进行递归判断
if(j<root)
right=SquenceofBST(arr, i,root-i);
return (left&&right);
}