题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果.
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
本题网上已经有用递归单纯判断的解法.
个人解法: 先得到序列对应的中序序列, 然后看中序序列是否从小到大有序, 得出判断.
相比:时间复杂度相同, 增加N的空间, 但可求得对应的中序序列.
以下为代码:
复制代码 代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 100
int seq[LEN + 1] = {0};
int *mid = NULL;
int pos = 1;
void getmid(int start, int end);
int check(int num);
int main()
{
int val;
int num;
int ret;
int i;
printf("input the sequence, end it with '-9999': ");
num = 1;
scanf("%d", &val);
while(val != -9999)
{
seq[num] = val;
num ++;
scanf("%d", &val);
}
num--;
mid = (int *)malloc((num + 1) * sizeof(int));
if(mid == NULL)
{
printf("malloc failed.\n");
exit(1);
}
memset(mid, 0, num + 1);
getmid(1, num);
printf("mid: ");
for(i = 1; i< num +1; i++)
{
printf("%d ", mid[i]);
}
printf("\n");
ret = check(num);
if(ret == -1)
{
printf("no.\n");
}
else
{
printf("yes\n");
}
return 0;
}/* main() */
void getmid(int start, int end)
{
int flag;
if(start > end)
{
return;
}
if(start == end)
{
mid[pos] = seq[end];
pos ++;
return;
}
int par;
par = start;
flag = 0;
while(par < end)
{
if(seq[par] > seq[end])
{
flag = 1;
getmid(start, par - 1);
mid[pos] = seq[end];
pos ++;
getmid(par, end - 1);
break;
}
par ++;
}
if(!flag)
{
getmid(start, end-1);
mid[pos] = seq[end];
pos ++;
}
}/* getmid */
int check(int num)
{
int i;
for(i = 1; i < num; i++)
{
if(mid[i] > mid[i+1])
{
return -1;
}
}
return 0;
}/* check() */
相关推荐:
javascript 面向对象,实现namespace,class,继承,重载
JSP forward用法分析实例代码分析
php与XML、XSLT、Mysql的结合运用实现代码
MSSQL 多字段根据范围求最大值实现方法
csdn 论坛技术区平均给分功能
初学js者对javascript面向对象的认识分析
sqlserver 中charindex/patindex/like 的比较
sql 语句中的 NULL值
写出更好的JavaScript程序之undefined篇(中)
最常用的SQL语句
JavaScript 语法集锦 脚本之家基础推荐
php 静态变量的初始化
中文用户名的js检验正则
sqlserver 中ntext字段的批量替换(updatetext的用法)
枚举域内计算机个数vbscript脚本(没环境,没测试)
php header 详细使用说明与使用心得第1/2页
SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
asp.net 页面转向 Response.Redirect, Server.Transfer, Server.Execute的区别
php实现网站插件机制的方法
MySQL下将一个表的数据插入到另外一个表的实现语句
AJAX 自学练习 请求与显示
Mootools 1.2教程 Tooltips
Linux ORCLE数据库增量备份脚本
存储于xml中需要的HTML转义代码
asp.net 用继承方法实现页面判断session
Flex 获得png透明截图的问题和解决方法
JavaScript 常用函数库详解
SQLSERVER中union,cube,rollup,cumpute运算符使用说明
通过表单的做为二进制文件上传request.totalbytes提取出上传的二级制数据
php self,$this,const,static,-&gt;的使用
基于HTTP长连接的"服务器推"技术的php 简易聊天室
jQuery 使用手册(四)
用JavaScript实现 铁甲无敌奖门人 “开口中”猜数游戏
JS CSS制作饱含热情的镶边文字闪烁特效
Nginx 简单的负载均衡配置示例
Mootools 1.2教程 选项卡效果(Tabs)
百度用到的Js日历 大家可以看看
php 代码优化的42条建议 推荐
asp 获取url函数小结
SQL2005 大数据量检索的分页
jquery 框架使用教程 AJAX篇
php面向对象全攻略 (三)特殊的引用“$this”的使用
JavaScript中Object和Function的关系小结
彻底解决页面文字编码乱码问题
sql 服务器知识
PHP 木马攻击的防御设置方法
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
PHP 正则表达式函数库(两套)
实用的JS表单验证提示效果
正确维护配置Apache服务器的方法 保护系统安全