[剑指offer-1367]二叉搜索树的后序遍历序列
2016-02-08 18:42
483 查看
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。输入:
每个测试案例包括2行:第一行为1个整数n(1<=n<=10000),表示数组的长度。
第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。
输出:
对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。样例输入:
75 7 6 9 11 10 8
4
7 4 6 5
样例输出:
YesNo
代码实现
[code]#include <stdio.h> #include <stdbool.h> #include <stdlib.h> bool vertifyBST(int sequence[] , int length){ if(sequence == NULL || length <=0) return false; int i =0; //左子树范围 int root = sequence[length-1]; for (; i < length-1; i++) { if(sequence[i] > root) break; } int j = i; //二叉搜索树种右子树节点大于根节点 for(;j < length-1;j++){ if(sequence[j] < root) return false; } bool left = true; //验证左子树是否为BST if(i>0) left = vertifyBST(sequence, i); bool right = true; if(j<length-1) right = vertifyBST(sequence+i, length-i-1); return (left && right); } int main(int argc, const char * argv[]) { // insert code here... int n; while (scanf("%d",&n) != EOF) { int* sequence = (int*)malloc(n*sizeof(int)); for (int i=0; i<n; i++) { scanf("%d",sequence+i); } bool result = vertifyBST(sequence, n); if(result) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- 25. Reverse Nodes in k-Group
- js区分大小写
- 4.1、组合方法一Bootstrap、bagging和boosting
- JSTL标签
- 表单与样式
- Caffe使用教程
- 去掉NSString中的HTML标签
- 【翻译自mos文章】对于一个新建的db来说,对Dba_Feature_Usage_Statistics的查询返回零行
- JavaScript 实现页面元素(ul-li)的简单排序
- NodeJs的版本更新
- 黄聪:HtmlAgilityPack教程案例
- 字段内容发生变化事件JS写法
- 流程送审限制审核部门人员JS写法
- HTML5开发移动web应用——SAP UI5篇(4)
- jquery操作select(取值,设置选中)
- js一点代码备用
- 造轮子:js限制文本框只能输入数字方法
- [Redux] Passing the Store Down with <Provider> from React Redux
- html实战中遇到的问题
- HTML学习笔记(一)———基本结构