[剑指offer-1367]二叉搜索树的后序遍历序列
来源:互联网 发布:数据输入 编辑:程序博客网 时间:2024/06/06 14:15
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
输入:
每个测试案例包括2行:
第一行为1个整数n(1<=n<=10000),表示数组的长度。
第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。
输出:
对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。
样例输入:
7
5 7 6 9 11 10 8
4
7 4 6 5
样例输出:
Yes
No
代码实现
#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;}
0 0
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指Offer-->二叉搜索树的后序遍历序列
- 《剑指offer》二叉搜索树的后序遍历序列
- 【剑指Offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指 offer:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列||剑指offer
- 剑指offer-二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- [剑指offer]二叉搜索树的后序遍历序列
- 《剑指offer》-二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- Activity之间动画的切换
- 腾讯云代理查询方法渠道查询方法自己是谁的代理客户
- 25. Reverse Nodes in k-Group
- Android 学习(1)
- 读卡器项目总结(六)— 上位机通信协议
- [剑指offer-1367]二叉搜索树的后序遍历序列
- shiro入门实战笔记(3)--身份认证
- 进程实现原理
- linux 信号 alarm和pause
- 【翻译自mos文章】Oracle Database 12c Standard Edition 2 (12.1.0.2)
- __dict__, __getattr__和__setattr__
- python : BeautifulSoup 网页 table 解析范例
- hdu 1081 To The Max(矩阵中最大的和)
- java抽象类的创建