题解 | #二叉搜索树的后序遍历序列#
二叉搜索树的后序遍历序列
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)
}

阿里云成长空间 747人发布