剑指offer

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

2020-05-15  本文已影响0人  马甲要掉了

题目描述

输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

分析

1.后续遍历我们可以知道,最右边的是根节点r。

2.通过根节点r我们可以判断左子树和右子树。

3.判断左子树中的每个值是否小于r,右子树的每个值是否大于r.

4.对左、右子树递归判断。

相关知识点

二叉搜索树:左子树上所有结点的值均小于它的根结点的值;右子树上所有结点的值均大于它的根结点的值
后序遍历:左 右 根

代码如下

// 递归版
function VerifySquenceOfBST(sequence) {
  if (!sequence.length) return false;
  return judge(sequence, 0, sequence.length - 1);
}
function judge(a, l, r) {
  if (l >= r) return true;
  let i = r;
  while (a[i - 1] > a[r] && i > l) i--;
  for (let j = i - 1; j >= l; j--) {
    if (a[j] > a[r]) return false;
  }
  return judge(a, l, i - 1) && judge(a, i, r - 1);
}
上一篇 下一篇

猜你喜欢

热点阅读