博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】二叉搜索树的后序遍历序列
阅读量:6111 次
发布时间:2019-06-21

本文共 1235 字,大约阅读时间需要 4 分钟。

转载请注明出处:

    剑指offer上的第24题,主要考察递归思想,九度OJ上AC。

题目描写叙述:

输入一个整数数组,推断该数组是不是某二叉搜索树的后序遍历的结果。假设是则输出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
    要紧紧抓住二叉搜索树的特点,对于后序遍历序列,其每一个子树的最后一个元素会比前面的左边一部分大,右边一部分小,这样便能够通过递归来推断。

    AC代码例如以下:

#include
#include
#include
bool IsBehSequenceBST(int *seq,int len){ if(seq==NULL || len<1) return false; int root = seq[len-1]; int i; for(i=0;i
root) break; //第一个右子树元素的下标 int RightStart = i; for(;i
0) left = IsBehSequenceBST(seq,RightStart); bool right = true; if(RightStart < len-1-RightStart) right = IsBehSequenceBST(seq+i,len-RightStart-1); return (left && right);}int main(){ int n; while(scanf("%d",&n) != EOF) { int *seq = (int *)malloc(n*sizeof(int)); if(seq == NULL) exit(EXIT_FAILURE); int i; for(i=0;i
/**************************************************************
    
Problem: 1367
    
User: mmc_maodun
    
Language: C
    
Result: Accepted
    
Time:70 ms
    
Memory:1308 kb
****************************************************************/

你可能感兴趣的文章
JQuery-EasyUI Datagrid数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
查看>>
并发和并行的区别
查看>>
VC++实现非窗口类中使用定时器的方法
查看>>
.Net 中DataSet和DataTable的 区别与联系
查看>>
Windows 管理
查看>>
HDU 1619 Unidirectional TSP(单向TSP + 路径打印)
查看>>
使用avalon 实现一个订座系统
查看>>
MySQL执行外部sql脚本
查看>>
固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异
查看>>
java 结束程序进程 代码
查看>>
『摄影欣赏』20幅精美的秋天落叶风景欣赏【组图】
查看>>
基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
查看>>
Java I/O 文件加锁,压缩
查看>>
网页实战开发笔记之——最全面的HTML的头部信息介绍
查看>>
IOS 消息机制(NSNotificationCenter)
查看>>
[转载] MATLAB快捷键
查看>>
VS和Eclipse的调试功能哪个更强大?
查看>>
ReactNative踩坑日志——页面跳转之——Undefined is not an Object(evaluating this2.props.navigation.navigate)...
查看>>
shiro入门示例
查看>>
Spring实现封装自定义注解@Trimmed清除字符串前后的空格
查看>>