题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)
测试用例
输入:
[4,8,6,12,16,14,10]
输出:
true
思路:
由于是后续遍历,按照左、右、根节点这样的顺序遍历。二叉搜索树满足所有的左子树小于根节点的值,所有的右子树的值大于根节点的值。它的变化规律类似于抛物线,先递增后递减,不满足规律就直接返回false
代码如下:
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence == null || sequence.length == 0){
return false;
}
int left = 0;
int right = sequence.length-1;
while (right != 0){
while (sequence[left] < sequence[right]){
left++;
}
while(sequence[left] > sequence[right]){
left++;
}
if (left < right){
return false;
}
right--;
left = 0;
}
return true;
}
}