思路
首先后序遍历的最后一个值都是根节点
二叉搜索树的左子树均小于根节点,右子树均大于很节点
于是我们可以将最后一个节点取出来。然后再剩余的数组元素中找到第一个大于根节点的元素,该元素之后的元素都应该大于根节点,否则就是false。然后在对当前根节点的左子树,右子树进行上面的判断
var verifyPostorder = function(postorder) {
if(postorder.length === 1) return true
return verify(postorder,0,postorder.length-1)
};
var verify = function(arr,left,right){
if(left >= right) return true
let root = arr[right]
let leftindex = left;
while(arr[leftindex]<root && leftindex <right){
leftindex++
}
for(let i=leftindex+1;i<right;i++){
if(arr[i]<root) return false
}
return (verify(arr,left,leftindex-1) && verify(arr,leftindex,right-1))
}