二叉树的前序和中序得到后序 hdu1710
今天看学长发过来的资料上面提到了中科院机试会有一个二叉树的前序中序得到后序的题目。中科院的代码编写时间为一个小时,于是在七点整的时候我开始拍这个题目。这种类型完全没做过,只有纸质实现过,主体代码半个小时差不多刚好拍完。适应杭电的多数据格式改了5分钟。感觉这个时间有点长,仍须努力。
(g++可通过,因为是C++和C的混风)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node{
node *left;
node *right;
int num;
node()
{
left=NULL;
right=NULL;
num=;
}
};
int t;
int index=;
int pre[];
int in[];
int ans[];
void buildTree(node *root,int prel,int prer,int inl,int inr)
{
root->num=pre[prel];
root->left=new node();
root->right=new node();
for(int i=inl;i<=inr;i++)
{
if(in[i]==pre[prel])
{
int zuol=i-inl;
int youl=inr-i;
if(zuol==&&youl==)
{
root->right=NULL;
root->left=NULL;
}
else
{
if(i==inr)
{
buildTree(root->left,prel+,prel+zuol,inl,i-);
root->right=NULL;
}
else
if(i==inl)
{
buildTree(root->right,prel+zuol+,prer,i+,inr);
root->left=NULL;
}
else
{ buildTree(root->left,prel+,prel+zuol,inl,i-);
buildTree(root->right,prel+zuol+,prer,i+,inr);
}
}
}
}
}
void print(node *root)
{
if(root->left!=NULL)
print(root->left);
if(root->right!=NULL)
print(root->right);
ans[index++]=root->num;
}
int main()
{
int temp; while(scanf("%d",&t)!=EOF)
{
index=;
memset(pre,,sizeof(int));
memset(in,,sizeof(int));
memset(ans,,sizeof(int));
for(int i=;i<t;i++)
scanf("%d",&pre[i]);
for(int i=;i<t;i++)
scanf("%d",&in[i]);
node *root=new node();
buildTree(root,,t-,,t-);
print(root);
for(int i=;i<t-;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[t-]);
}
return ;
}
hdu 1710
后来看了下网上代码,发现有不需要构造树,直接用DFS的。高端洋气不清楚的样子。。
二叉树的前序和中序得到后序 hdu1710的更多相关文章
- 【二叉树遍历模版】前序遍历&&中序遍历&&后序遍历&&层次遍历&&Root->Right->Left遍历
[二叉树遍历模版]前序遍历 1.递归实现 test.cpp: 12345678910111213141516171819202122232425262728293031323334353637 ...
- Java实现二叉树的前序、中序、后序遍历(非递归方法)
在上一篇博客中,实现了Java中二叉树的三种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似,也简单 ...
- LeetCode二叉树的前序、中序、后序遍历(递归实现)
本文用递归算法实现二叉树的前序.中序和后序遍历,提供Java版的基本模板,在模板上稍作修改,即可解决LeetCode144. Binary Tree Preorder Traversal(二叉树前序遍 ...
- c/c++ 用前序和中序,或者中序和后序,创建二叉树
c/c++ 用前序和中序,或者中序和后序,创建二叉树 用前序和中序创建二叉树 //用没有结束标记的char*, clr为前序,lcr为中序来创建树 //前序的第一个字符一定是root节点,然后去中序字 ...
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
在上一篇博客中,实现了Java中二叉树的四种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序.层序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似, ...
- 【2】【leetcode-105,106】 从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 (没思路,典型记住思路好做) 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [ ...
- HDU 1710 (二叉树的前序和中序,求后序)
题目链接 题目大意: 输入二叉树的前序.中序遍历,请输出它的后序遍历 #include <stdio.h> #include <string.h> ; // 长度为n s1 前 ...
- PHP递归方法实现前序、中序、后序遍历二叉树
二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). class Node { public $value; pub ...
- 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)
将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...
随机推荐
- Cocos2d-x init() 和 onEnter() 区别
在Cocos2d-x中经常碰到 init() 和 onEnter() init()和onEnter()这两个方法都是CCNode的方法. 1.二者的执行顺序是:先init() 后onEnter(). ...
- hdu5188 加限制的01背包问题
http://acm.hdu.edu.cn/showproblem.php? pid=5188 Problem Description As one of the most powerful brus ...
- UC/0S2之中断
中断是计算机系统处理异步事件的重要机制.当异步事件发生时,事件通常是通过硬件向cpu发出中断请求的.在一般情况下,cpu响应这个请求后会立即运行中断服务程序来处理该事件: 为了处理任务延时.任务调度等 ...
- C#中接口和方法的运用(Fourteenth Day)
由于周五我有一些事情没来得及总结当天的知识,所以在今天总结一下周五在云和学院所学到的有关接口和方法的知识. 理论: 接口: •接口的定义:interface关键字,接口中可以有属性.方法(未实现) • ...
- 由命名空间函数而引发思考--js中的对象赋值问题
最近没有编码任务,作为一个才毕业的小辣鸡,给的任务就是看一下公司的新系统,熟悉怎么用哪些地方是干什么的. 下午喝了两杯水,感觉有点浪.然后就开始看了下代码.发现有一个函数是这样子的. var TX = ...
- mina教程
关于mina介绍这里不做阐述..... 我们先做一个关于mina的helloworld 首先先下载mina包:http://mina.apache.org/ (如果你已经下载,此步骤忽略) 下载下来以 ...
- Aptana Studio 3 官方汉化包汉化
Babel Language Pack Update Site for Helios This URL is an Eclipse software repository:http://downloa ...
- 织梦dedeCMS|系统基本配置标签
站点根网址: {dede:global.cfg_basehost/}调出网站的名称: {dede:field.title/}-{dede:global.cfg_webname/} 网站 ...
- RMAN多种备份脚本分享
1.相关参数介绍: 命令行参数 描述 TARGET 为目标数据库定义的一个连接字符串,当连接到一个目标数据库时,该连续是SYSDBA连接.该用户拥有启动和关闭数据库的权利,必须属于OSDBA组,必须建 ...
- F#实现的单链表(函数式的思想)
// 在 http://fsharp.net 上了解有关 F# 的更多信息 // 请参阅“F# 教程”项目以获取更多帮助. type list = | Nil | Cons of int * list ...