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

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

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
};
重要的是理解后续遍历的特点
全部评论

相关推荐

那一天的Java_J...:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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