//最后一个元素是根节点root;
//除去root后的序列,前面是根节点的左子树left,后面是根节点的右子树right;
//左子树序列一定都要比root小,右子树序列一定都要比root大.
//对左子树和右子树的序列同样满足以上三点
function VerifySquenceOfBST(sequence)
{
let result,l1;
l1=sequence.length;
if(l1==0) return false;
if(l1==1) return true;
result=Help(sequence,0,l1-1);
return result;
}
function Help(sequence,start,end)
{
let root=sequence[end];
let i=end;
//该根节点只有左子树或者右子树的情况,边界条件一直遍历
if(start>=end) return true;
//找到左右子树临界点i
while(sequence[i-1]>root&&i>start) i--;
//注意边界条件j为什么是i-1
for(let j=i-1;j>=start;j--){
//若右子树序列里存在小于root的节点,返回false
if(sequence[j]>root){
return false;
}
}
//判断出除了根节点以外的:左子树和右子树
return Help(sequence,start,i-1) && Help(sequence,i,end-1);
}
module.exports = {
VerifySquenceOfBST : VerifySquenceOfBST
};
🆘🆘🆘🆘哪个大佬来告诉我:
边界条件j为什么是i-1
for(let j=i-1;j>=start;j–){
//若右子树序列里存在小于root的节点,返回false
if(sequence[j]>root){
return false;
}