2018-3-6

按照王道机试书上的思路再做了一遍,先根据先序和中序建树,然后后序遍历。

静态分配数组用于建树,可以返回数组地址当作结点指针。

#include<iostream>
#include<cstdio>
using namespace std; int pre[],in[],n; struct Node
{
Node *lson,*rson;
int num;
}node[]; //静态分配一个数组用于建树 int cntn; Node *create(int num)
{
node[cntn].lson=node[cntn].rson=NULL;
node[cntn].num=num;
return &node[cntn++]; //返回数组元素的地址
} Node *build(int ph,int ih,int len)
{
Node *now=create(pre[ph]);
int i;
for(i=;pre[ph]!=in[i];i++);
if(i!=ih)
now->lson=build(ph+,ih,i-ih);
if(i!=ih+len-)
now->rson=build(ph+i-ih+,i+,len-(i-ih)-);
return now;
} int cnt;
void postOrder(Node *rt)
{
if(rt==NULL)
return;
postOrder(rt->lson);
postOrder(rt->rson);
printf("%d",rt->num);
if(++cnt==n)
printf("\n");
else
printf(" ");
} int main()
{
while(scanf("%d",&n)!=EOF)
{
cntn=cnt=;
for(int i=; i<=n; i++)
scanf("%d",&pre[i]);
for(int i=; i<=n; i++)
scanf("%d",&in[i]);
Node *rt=build(,,n);
postOrder(rt);
}
return ;
}

2018-3-3

又做了一遍,这次是自己根据思想自己码了一遍

看了上次的代码,感觉还是上次的好一点

#include<iostream>
#include<cstdio>
using namespace std; int pre[],in[],cnt,n; void getPost(int pl,int pr,int il,int ir)
{
if(pr<pl||ir<il)
return;
int loc;
for(int i=il; i<=ir; i++)
if(in[i]==pre[pl])
{
loc=i;
break;
}
if(<loc-il)
getPost(pl+,pl+loc-il,il,loc-);
if(<ir-loc)
getPost(pr-(ir-loc)+,pr,loc+,ir);
printf("%d",pre[pl]);
cnt++;
if(cnt==n)
printf("\n");
else
printf(" "); }
int main()
{
while(scanf("%d",&n)!=EOF)
{
cnt=;
for(int i=; i<=n; i++)
scanf("%d",&pre[i]);
for(int i=; i<=n; i++)
scanf("%d",&in[i]);
getPost(,n,,n);
}
return ;
}

2018-1-3

研究生考试初试结束一个周了,开始准备复试了,又要开始刷题了。

给定一个二叉树前序和中序,确定后序。

#include<iostream>
#include<cstdio>
using namespace std; int pre[],in[]; void getPostOrder(int ph,int ih,int len,int flag)
{
if(len<)
return;
int i;
for(i=; pre[ph]!=in[ih+i]; i++); //在中序中找到根节点
getPostOrder(ph+,ih,i,);     //处理左子树
getPostOrder(ph+i+,ih+i+,len-i-,); //处理右子树
if(flag)
printf("%d\n",pre[ph]);
else
printf("%d ",pre[ph]);
} int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=; i<n; i++)
scanf("%d",&pre[i]);
for(int i=; i<n; i++)
scanf("%d",&in[i]);
//cout<<"*"<<endl;
getPostOrder(,,n,);
}
return ;
}

HDU_1710_二叉树前序中序确定后序的更多相关文章

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

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

  2. 二叉树的前序和中序得到后序 hdu1710

    今天看学长发过来的资料上面提到了中科院机试会有一个二叉树的前序中序得到后序的题目.中科院的代码编写时间为一个小时,于是在七点整的时候我开始拍这个题目.这种类型完全没做过,只有纸质实现过,主体代码半个小 ...

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

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

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

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

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

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

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

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

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

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

  8. PHP递归方法实现前序、中序、后序遍历二叉树

    二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). class Node { public $value; pub ...

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

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

随机推荐

  1. forword 与 redirect

    直接转发方式(Forward) 客户端和浏览器只发出一次请求,Servlet.HTML.JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的 ...

  2. +Java中的native关键字浅析(Java+Native+Interface)++

    JNI是Java Native Interface的 缩写.从Java 1.1开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的 ...

  3. 强类型DataSet (2011-12-30 23:16:59)转载▼ 标签: 杂谈 分类: Asp.Net练习笔记 http://blog.sina.com.cn/s/blog_9d90c4140101214w.html

    强类型DataSet (2011-12-30 23:16:59) 转载▼ 标签: 杂谈 分类: Asp.Net练习笔记 using System; using System.Collections.G ...

  4. IOS应用在iPhone5和iPhone5s上不能全屏显示,应用画面上下各有1条黑色的解决方案

    设置启动图片就可以了: 添加启动图: 接着设置为启动图: 这样就ok了

  5. Atom vim mode

    /******************************************************************** * Atom vim mode * 说明: * 想找一个具有 ...

  6. Synchronized的使用和注意事项

    synchronized: 1.取得的锁都是对象锁,而不是把一段代码或方法(函数)当作锁: 2.多个线程访问的必须是同一个对象. 3.当一个线程执行的代码出现异常时,其所持有的锁会自动释放 4.A线程 ...

  7. mongoDB 安全权限访问控制

    MongoDB3.0权限 https://blog.csdn.net/leonzhouwei/article/details/46564141 转自:http://ibruce.info/2015/0 ...

  8. arcgis for silverlight 相关学习资料整理

    Arcgis Resources:http://resources.arcgis.com/en/home/ esri中文官方论坛:http://www.gisall.com/portal.php 爱吃 ...

  9. hdu4608 I-number

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4608 题意:给定一个数X,注意X是个大数,X的长度不超过1e5. 让你求出一个Y,满足三个条件,Y&g ...

  10. RestTemplate中headers中添加Host不生效

    在使用restTemplate访问内网接口时,不打算指host,支持ip访问,所以我们需要再header中指定host.但经调试,发现HttpURLConnection中Host无法覆盖.解决方案: ...