博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
根据二叉树的中序遍历和层次遍历还原二叉树
阅读量:6848 次
发布时间:2019-06-26

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

问题 C: 还原二叉树

时间限制: 1 Sec
内存限制: 128 MB
提交: 322
解决: 153

题目描述

给一棵二叉树的层序遍历序列和中序遍历序列,求这棵二叉树的先序遍历序列和后序遍历序列。

 

输入

每个输入文件中一组数据。

第一行一个正整数N(1<=N<=30),代表二叉树的结点个数(结点编号为1~N)。接下来两行,每行N个正整数,分别代表二叉树的层序遍历序列和中序遍历序列。数据保证序列中1~N的每个数出现且只出现一次。

 

输出

输出两行,每行N个正整数,分别代表二叉树的先序遍历序列和后序遍历序列。每行末尾不输出额外的空格。

 

样例输入

7
3 5 4 2 6 7 1
2 5 3 6 4 7 1

样例输出

3 5 2 4 6 7 1
2 5 6 1 7 4 3
 
解题思想:
习惯通过静态的方式来处理树的问题了。整个过程相当于模拟二叉树的层次遍历将二叉树还原出来,最后对其进行遍历。
1 #include 
2 #include
3 #include
4 #define MAXN 100 5 using namespace std; 6 typedef struct Node{ 7 int v,L,R; 8 Node(){v=L=R=-1;} 9 }Node;10 Node node[MAXN];11 int lt[MAXN],it[MAXN],flag[MAXN],a;12 void pro(int x){13 if(a==0){14 printf("%d",node[x].v);15 a=1;16 }else{17 printf(" %d",node[x].v);18 }19 if(node[x].L!=-1){20 pro(node[x].L);21 }22 if(node[x].R!=-1){23 pro(node[x].R);24 }25 }26 void post(int x){27 if(node[x].L!=-1){28 post(node[x].L);29 }30 if(node[x].R!=-1){31 post(node[x].R);32 }33 if(a==0){34 printf("%d",node[x].v);35 a=1;36 }else{37 printf(" %d",node[x].v);38 }39 }40 int main()41 {42 int n;43 scanf("%d",&n);44 for(int i=0;i
0&&flag[c-1]!=1){61 node[index1].L=i;62 node[i].v=lt[i++];63 c=0;64 while(node[index1].v!=it[c])65 c++;66 flag[c]=1;67 }68 if(c

 

转载于:https://www.cnblogs.com/tianxia2s/p/6483121.html

你可能感兴趣的文章
JavaScript 捕获按键
查看>>
记录Javascript数组的方法参考
查看>>
截图软件
查看>>
关于抽奖概率的问题
查看>>
《鸟哥的私房菜阅读摘要》——linux的简介和计算机基础
查看>>
hql语句的case when then else end问题
查看>>
13040:All in All
查看>>
动态规划
查看>>
单纯形法
查看>>
21.Spring Boot 使用Java代码创建Bean并注册到Spring中
查看>>
window.location.href的用法
查看>>
C# MVC中直接执行Js
查看>>
mac book下批量替换多个文件中的字符
查看>>
python IO编程-序列化
查看>>
9.回文数
查看>>
[转] 使用NVM快速搭建NODE开发环境
查看>>
pip国内源
查看>>
java的一些基本概念
查看>>
uva 796(求割边)
查看>>
sas数组,数组的语法与一些特殊定义,获取维度大小
查看>>