题目描述

解题思路
- 本题关键点在于:二叉搜索树的后序遍历序列的最后一个元素是根节点,左子树均小于根节点,右子树均大于根节点
- 使用递归是本题的解题方法
- 本题需要额外考虑的情况在于有的序列是没有右子树的,如果没有右子树,那么分割左右子树的位置就是根节点所在的位置,默认右子树是一个空数组
解题代码
var verifyPostorder = function(postorder) {
let len = postorder.length;
if (len < 2) return true;
let flag = 0;
let root = postorder[len-1];
for (let i = 0; i < postorder.length;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;
}
};
总结(本题给我们的启示思路)
- 启示一:学会使用递归求解
- 启示二:知道二叉搜索树的后序遍历序列的最后一个节点是根节点
- 启示三:知道没有右子树的序列,按照空数组来进行处理