//输入一个整数数组,
// 判断该数组是不是某二叉搜索树的后序遍历的结果。
// 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
function VerifySquenceOfBST(sequence)
{
// write code here
if(sequence.length <= 0){
return false;
}
var len = sequence.length;
var root = sequence[len-1];
var i = 0;
for(;i<len-1;i++)
{
if(root < sequence[i]) break;
//从最开始 直到 第一个 大于 根节点的数 时,跳出循环
}
var j = i;
// 此时找到前半部分数据应该均小于 根节点
for(;j<len-1;j++)
{//开始测试后半部分数据
if(root > sequence[j]) return false;// 后半部分若小于 根节点 ,则该数组不是后序遍历
}
// 设置左半部分的数据标志
var left = true;
if(i>0){
// 采用递归 ,测试 前半部分数组 是否是 后序遍历
left = VerifySquenceOfBST(sequence.slice(0,i)) //数组的 slice 方法 ,不会改变原数组 ,会返回一个新数组 ,会从原数组中截取 从 0 到 i的新数组
}
var right = true;
if(i<len - 1){
// 采用递归 ,测试 后半部分数组 是否是 后序遍历
right = VerifySquenceOfBST(sequence.slice(i,len-1));
}
// 只有 leftFlag 和 rightFlag 都为 true 时,说明 该数组是 后序遍历
return left && right;
}