/*
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
*/
//思路:
//二叉树后序遍历数组的最后一个数为根结点,剩余数字中,
//小于根结点的数字(即左子树部分)都排在前面,大于根结点的数字(即右子树部分)都排在后面。
//根据遍历数组的这个特性,可以编写出一个递归函数,用于实现题目所要求的判断功能。
public class Class28 {
public boolean yanZhengHouXu(int[] data){
if((data == null) || (data.length <= 0)){
return false;
}
return yanZhengHouXuMain(data, 0, data.length - 1);
}
public boolean yanZhengHouXuMain(int[] data, int start, int end){
if(start >= end){
return true;
}
int i = start;
//二叉树左子树节点小于根节点
while(data[i] < data[end]){
i++;
}
int j = i;
//二叉树右子树节点大于根节点
while(j < end){
{
if(data[j] < data[end]){
return false;
}
j++;
}
}
boolean left = yanZhengHouXuMain(data, start, i - 1);
boolean right = yanZhengHouXuMain(data, i, end-1);
return left && right;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}