题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路:这个题目关键在于理清后序遍历有什么特点。二叉搜索树的后序遍历:该序列的最后一个元素作为一个指标,从头开始遍历,如果遍历到一个元素,它大于最后一个元素。这个时候就可以判断该元素之前的所有元素都小于最后一个元素。而该元素之后所有的元素都大于最后一个元素,满足该条件就是二叉搜索树的后序遍历。
例子: 2 4 3 6 8 7 5 这是一个正确的后序遍历
这个例子的特点就是:最后一个元素是 5 ,首先遍历数组,当遍历到6的时候,6前面的值都小于5,如果在6后面的值有一个小于5就不是后序遍历,所以一旦在遍历的时候遇到比最后一个元素的值索引,那么之后的所有元素都必须大于5,否则就不是后序遍历序列。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence.length == 0){
return false;
}
int last = sequence.length-1;
int count =0;
while(last!=0){
while(sequence[count]<sequence[last]){
count++;
}
while(sequence[count]>sequence[last]){
count++;
}
if(count<last){
return false;
}
last--;
count=0;
}
return true;
}