输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。讨论区地址
- 确定root;
- 遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树;
- 遍历右子树,若发现有小于root的值,则直接返回false;
- 分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤1、2、3)。
// 找住二叉查找树的特点:左子树<根<右子树 使用分治思想
function VerifySquenceOfBST(sequence) {
if (sequence.length === 0) return false
if (sequence.length === 1) return true
return judge(sequence, 0, sequence.length - 1)
}
function judge(arr, start, end) {
if (start >= end) {
return true
}
let i = start
while (arr[i] < arr[end]) { // 左部分
++i
}
for (let j = i; j < end; j++) { // 右部分
if (arr[j] < arr[end]) {
return false
}
}
return judge(arr, start, i - 1) && judge(arr, i, end - 1)
}
网友评论