每日刷题day05---二叉搜索树的后序遍历

55 阅读1分钟

leetcode传送门

image.png

思路

首先后序遍历的最后一个值都是根节点

二叉搜索树的左子树均小于根节点,右子树均大于很节点

于是我们可以将最后一个节点取出来。然后再剩余的数组元素中找到第一个大于根节点的元素,该元素之后的元素都应该大于根节点,否则就是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))

}