function VerifySquenceOfBST(sequence)
{
// write code here
/*
已知条件:后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。
1、确定root;
2、遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树;
3、遍历右子树,若发现有小于root的值,则直接返回false;
4、分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤1、2、3)
*/
var len = sequence.length;
if (len == 0) {
return false;
}
return isLastOrder(sequence, 0, len - 1);
}
function isLastOrder(sequence, start, end) {
if(start >= end)
return true;
var root = sequence[end];
var i=start;
while(i<end && sequence[i]<root)
i++;
for(var j=i;j<end;j++){
if(sequence[j]<root) return false;
}
// 4 判断左右子树
return isLastOrder(sequence, start, i - 1) && isLastOrder(sequence, i, end - 1);
}