二叉搜索树的后续遍历序列
2016-05-28 14:38
363 查看
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。
思路:在后序遍历得到的序列中,最后一个数字是输的根节点的值。数组前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。如此就可以判断数组每一部分对应的子树的结构。
代码:
思路:在后序遍历得到的序列中,最后一个数字是输的根节点的值。数组前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。如此就可以判断数组每一部分对应的子树的结构。
代码:
#include <iostream> #include <vector> using namespace std; bool verifysquence(vector<int> sequence, int low, int high){ if(sequence.empty()) return false; if(low >= high) return true; int root = sequence[high]; int cur = low; while(sequence[cur] < root) cur++; int mid = cur; while(sequence[cur] > root) cur++; if(cur != high) return false; bool left = verifysquence(sequence, low, mid-1); bool right = verifysquence(sequence, mid, high-1); return left&&right; } int main(){ int a[] = {5,7,6,9,10,11,8}, b[] = {7,4,6,5}; vector<int> vec1(a,a+7), vec2(b,b+4); cout << (verifysquence(vec1, 0, vec1.size()-1)? "true":"false") << endl; cout << (verifysquence(vec2, 0, vec2.size()-1)? "true":"false") << endl; }
相关文章推荐
- 快速排序
- failed to lazily initialize a collection of role(hibernate一对多或者多对多懒加载问题)
- Must Know Tips/Tricks in Deep Neural Networks (by Xiu-Shen Wei)
- Django迁移
- 配置tomcat启动时的优化参数
- 用JS写Ajax的请求函数(1)
- LNMP环境网站搭建
- 【转】Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
- Android WebView填坑记录
- 设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p
- hdu 2590 Building roads(环+贪心)
- 不同js异步函数同步的实现方法
- 处理tomcat不必要日志
- Android dataonly、wifionly的判别方式
- 【BZOJ4516】生成魔咒,后缀数组+Splay
- oracle数字转换为人民币大写
- Source not found.
- 指针常量与常量指针
- 第六次作业
- 每天刷个算法题20160525:快速排序的递归转非递归解法