问题:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解决:
① 在后序遍历得到的序列中,最后一个值是树的根节点,数组中前面的数字可以分为两部分,第一部分是左子树节点的值,均小于根节点,第二部分是右子树节点的值,它们都比根节点的值大。只需要先找到第一个大于根节点的值,然后判断右子树中是否有小于根节点的数,若有,返回false;若没有,递归判断左右子树。
public class Solution {//判断是否能构成二叉搜索树
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence == null || sequence.length <= 0){
return false;
}
return VerifySquenceOfBST(sequence,0,sequence.length - 1);
}
public boolean VerifySquenceOfBST(int[] sequence,int start,int end){
if (start >= end) return true;//所有的数据都处理完成
int i = start;
while(i < end - 1 && sequence[i] < sequence[end]){
i ++;
}
int j = i;
while(j < end - 1 && sequence[j] > sequence[end]){
j ++;
}
if (j != end - 1){
return false;
}
return VerifySquenceOfBST(sequence,start,i - 1) && VerifySquenceOfBST(sequence,i,end - 1);
}
}