描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。
基本思路
后序遍历:最后一个节点一定是根节点,而又是二叉搜索树,所以可以遍历到比根节点小的序列,也可以遍历到比根节点大的序列
进而再进行递归遍历
注意边界如果能顺利遍历到最后,则此时的遍历下标i一定不小于数组长度,如果没有超过数组长度,则说明并不后序遍历序列
function VerifySquenceOfBST(sequence)
{
// write code here
if(sequence.length ===0) return false
return verify(sequence)
function verify(s){
if(s.length ==0 ) return true
let head = s[s.length-1]
let i = 0
while(s[i]<head){
i++
}
//此时的left刚好是到右子树第一个,slice的时候刚好不包含
let left = i;
while(s[i]>head){
//最后一次i++就是要s.length-1的位置
i++
}
//如果到最后还未超过s的长度,则要以认为它不是后序遍历的序列
if(i<s.length-1) return false
return verify(s.slice(0,left))&&verify(s.slice(left,s.length-1))
}
}
module.exports = {
VerifySquenceOfBST : VerifySquenceOfBST
};