题解 | #二叉搜索树的后序遍历序列#

二叉搜索树的后序遍历序列

https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

// 判断一个数组是不是一个二叉搜索树的后序遍历的结果 等价于 判断一个数组是不是满足这个特性:
// 最后一个元素为根节点,某个元素之前所有元素都小于根节点,之后所有元素都大于根节点,并且以根节点大小为界分成的左右两部分仍然符合这个特点。
function VerifySquenceOfBST(sequence) {
    if (sequence.length === 0) {
        return false;// 约定空树不是二叉搜索树
    }
    return verify(sequence);
}
function verify(arr) {// 上帝写好的函数,它能判断一个数组是不是一个二叉搜索树的后序遍历的结果
    if (arr.length <= 1) { //特殊情况: 空树或只有一个节点的树一定是二叉搜索树
        return true;
    }

    //特殊情况:判断整个数组是不是满足这个特性
    let rootIndex = 0;
    let rootValue = arr[arr.length - 1];

    while (arr[rootIndex] < rootValue) {
        rootIndex++;
    }

    let temp = rootIndex;

    while (temp < arr.length) {
        if (arr[temp] < rootValue) {
            return false;
        }
        temp++;
    }
    //执行到这里还没return false说明整体是满足的
    
    let left = verify(arr.slice(0, rootIndex));
    let right = verify(arr.slice(rootIndex, arr.length - 1));
    return left && right;//return 左右两边是否满足
}
module.exports = {
    VerifySquenceOfBST: VerifySquenceOfBST
};
重要的是理解后续遍历的特点
全部评论

相关推荐

人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务