今天看学长发过来的资料上面提到了中科院机试会有一个二叉树的前序中序得到后序的题目。中科院的代码编写时间为一个小时,于是在七点整的时候我开始拍这个题目。这种类型完全没做过,只有纸质实现过,主体代码半个小时差不多刚好拍完。适应杭电的多数据格式改了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的更多相关文章

  1. 【二叉树遍历模版】前序遍历&amp;&amp;中序遍历&amp;&amp;后序遍历&amp;&amp;层次遍历&amp;&amp;Root-&gt;Right-&gt;Left遍历

    [二叉树遍历模版]前序遍历     1.递归实现 test.cpp: 12345678910111213141516171819202122232425262728293031323334353637 ...

  2. Java实现二叉树的前序、中序、后序遍历(非递归方法)

      在上一篇博客中,实现了Java中二叉树的三种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似,也简单 ...

  3. LeetCode二叉树的前序、中序、后序遍历(递归实现)

    本文用递归算法实现二叉树的前序.中序和后序遍历,提供Java版的基本模板,在模板上稍作修改,即可解决LeetCode144. Binary Tree Preorder Traversal(二叉树前序遍 ...

  4. c/c++ 用前序和中序,或者中序和后序,创建二叉树

    c/c++ 用前序和中序,或者中序和后序,创建二叉树 用前序和中序创建二叉树 //用没有结束标记的char*, clr为前序,lcr为中序来创建树 //前序的第一个字符一定是root节点,然后去中序字 ...

  5. Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)

      在上一篇博客中,实现了Java中二叉树的四种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序.层序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似, ...

  6. 【2】【leetcode-105,106】 从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树

    105. 从前序与中序遍历序列构造二叉树 (没思路,典型记住思路好做) 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [ ...

  7. HDU 1710 (二叉树的前序和中序,求后序)

    题目链接 题目大意: 输入二叉树的前序.中序遍历,请输出它的后序遍历 #include <stdio.h> #include <string.h> ; // 长度为n s1 前 ...

  8. 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

    将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...

  9. Python实现二叉树的前序、中序、后序、层次遍历

      有关树的理论部分描述:<数据结构与算法>-4-树与二叉树:   下面代码均基于python实现,包含: 二叉树的前序.中序.后序遍历的递归算法和非递归算法: 层次遍历: 由前序序列.中 ...

随机推荐

  1. Scrapy学习教程

    http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html 在线学习教程: http://learnpythonthehardway ...

  2. 查询mysql数据库表的信息(表大小、数据大小、索引大小)

    select * from information_schema.TABLES where information_schema.TABLES.TABLE_SCHEMA='databasename' ...

  3. scala集合和高级函数操作

    scala常用函数操作 reduceLeft   是将集合的元素从左向右进行所需要的相应操作,图以减法为例展示,表达的算法是 : 1-2-3-4-5 例: (1 to 5).reduceLeft(_ ...

  4. 再次写了第一个servlet

    费时2小时,熟悉tomcat和编写了第一个servlet

  5. 初识服务器和Linux

    一.什么是计算机 1.介绍 一说到计算机,我们首先想到的就是电脑,没错,电脑就是计算机,但是计算机不只是电脑. 所谓的电脑就是一种计算机,而计算机其实是:接收使用者输入的指令与资料,经中央处理器的数学 ...

  6. IdeaJ 常见插件安装, 常用配置,常用快捷键

    -- 系统是 Ubuntu 16.04 1, 插件: 2, 常见的设置: [1] 代码提示的修改: File --> settings --> Keymap --> MainMenu ...

  7. Windows下nginx下安装amqp

    1.复制php_amqp.dll 到php/ext/ 2.复制rabbitmq.4.dll 到php/3.复制rabbitmq.4.dll 到windows/system32/ (如32位) ,64位 ...

  8. oracle查询出来的时间吸附为每5min

    to_char(PACKET_TIME,'yyyy-mm-dd hh24:')||floor(to_char(PACKET_TIME,'mi')/5 )*5||':00' as start_time, ...

  9. ngxs 状态管理器

    官网文档 ng6,rxjs6.0.0,ngxs3.0.1 λ ng new ngxs --style=styl --routing --skip-install λ cd ngxs λ yarn λ ...

  10. ubuntu下hadoop,spark配置

    转载来自:http://www.cnblogs.com/spark-china/p/3941878.html 在VMWare 中准备第二.第三台运行Ubuntu系统的机器:   在VMWare中构建第 ...