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

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

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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param sequence int整型一维数组 
 * @return bool布尔型
 */
export function VerifySquenceOfBST(sequence: number[]): boolean {
    // write code here
    //找出根节点,然后区分左树和右树,当左子树出现大于根节点的就不合法,右子树出现小于 根节点的也不合法,一直这样分治下去来进行判断
    const size = sequence.length
    //空树不是搜索树
    if(size == 0){
        return false
    }
    //一个函数来进行判断左树中是否有一个值大于根节点
    return checkVaild(sequence,0,size-1)
}
const checkVaild = (array,start,end):boolean=>{
    //当子树只有一个节点
    if(start >= end)return true
    //找到根节点
    const root = array[end]
    //区分左右子树
    let j = end - 1
    while(j >=0 && array[j] > root)j--;
    //检查左子树是否存在大于根节点的
    for(let i = start;i <= j;i++){
        if(array[i] > root){
            return false
        }
    }
    //分治来检查左子树和右子树
    return checkVaild(array,start,j) && checkVaild(array,j +1,end-1)
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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