题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
二叉搜索树(BST)的后序遍历规则为:一个序列S,最后一个元素是X(也就是根),去掉X之后的序列为T,那么序列T可以分成两段,前一段(左子树)小于X,后一段(右子树)大于X。同时这两段(左右子树)也符合BST的后序遍历规则,想到这,明显可以用到递归解决。
有了思路,接下来就可以写代码了。
function VerifySquenceOfBST(sequence)
{
if(!sequence.length){
return false
}
return adjustSequence(sequence,0,sequence.length)
}
function adjustSequence(sequence,start,end){
if(start>end){
return true
}
var i = start;
while(i<end && sequence[i]<sequence[end]){
i++
}
for(var j=i;j<end;j++){
if(sequence[j]<sequence[end]){
return false
}
}
return adjustSequence(sequence,0,i-1) && adjustSequence(sequence,i,end-1)
}