题目描述
解题思路
二叉搜索树的特点是,所有左子树比根节点的值小,所有右子树比根节点的值大,左右子树内部同样也是。
后序遍历的根节点在最后一位,找到根节点,再利用二叉搜索树的特点则能判断。
Coding
var verifyPostorder = function(postorder) {
if(!postorder) return false;
let len = postorder.length;
if(len < 2) return true;
let flag = 0; //区分左右子树
let root = postorder[len - 1]; //根节点
for(let i = 0;i < len;i++){
if(postorder[i] > postorder[len - 1]){
flag = i;
break;
}
if(i === len - 1){
flag = i;
}
}
let leftTree = postorder.slice(0,flag); //左子树
let rightTree = postorder.slice(flag,len - 1); //右子树
//判断右子树的每一个节点是否大于根节点,都大于,则为合格二叉搜索树,反之则不是。
if(rightTree.every((value) => value > root)){
return verifyPostorder(leftTree) && verifyPostorder(rightTree)
}else{
return false
}
};
相关知识点
Array every()方法用于检测数组所有元素是否都符合指定条件。
every() 不会对空数组进行检测。
every() 不会改变原始数组。
关于Array.every() 方法,参考 这儿