题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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);
}

非递归版本

// 非递归版
function VerifySquenceOfBST2(sequence) {
let n = sequence.length,
i = 0;
if (!n) return false;
while (n--) {
while (sequence[i] < sequence[n]) i++;
while (sequence[i] > sequence[n]) i++;
if (i < n) return false;
i = 0;
}
return true;
}

最新文章

  1. C#的Raw Socket实现网络封包监视
  2. 记一本关于thinkphp&amp;&amp;MVC的好书
  3. google prettify 代码高亮显示
  4. js 动态 activex 组件
  5. Redis 集群实现
  6. 01-语言入门-01-A+B Problem
  7. UVA 1659 Help Little Laura 帮助小劳拉 (最小费用流,最小循环流)
  8. MVC——数据库增删改查(Razor)——Html语法
  9. uva 10047 the monocyle (四维bfs)
  10. Spring Boot:Consider defining a bean of type &#39;*.*.*&#39; in your configuration解决方案
  11. Python_实现json数据的jsonPath(精简版)定位及增删改操作
  12. Eclipse中提示svn: is already locked的解决办法
  13. Fundebug累计处理1000万条错误事件!
  14. 缺失dll的问题
  15. smarty模板的内置函数
  16. scrapy爬取网址,进而爬取详情页问题
  17. centos+uwsgi+nginx+python+django服务器安装配置
  18. SQL 相关分页方法
  19. Selenium之使用PageFactory初始化pageobject
  20. python16_day16【Django_ORM、模板】

热门文章

  1. js如何获取字符串第几次出现的位置
  2. ubuntu git的安装更新及配置
  3. python特殊函数__str__、__repr__和__len__
  4. jquery parents() next() prev() 找父级别标签 找同级别标签
  5. ZOJ 4067 - Books - [贪心][2018 ACM-ICPC Asia Qingdao Regional Problem J]
  6. 消息系统kafka原理解析
  7. servlet转发重定向
  8. 更新node的版本,node没有安装到c盘,安装到了D盘
  9. 11.2-uC/OS-III添加任务到就绪队列
  10. python练习题-day16