L2-006 树的遍历 RTA
L2-006 树的遍历(25 分)
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
4 1 6 3 5 7 2
1 #include<iostream> 2 #include<queue> 3 #include <vector> 4 #include <cstdio> 5 using namespace std; 6 const int N =100; 7 struct Node{ 8 int l,r; 9 }e[N]; 10 int ba[N],mid[N],qi[N],n; 11 //la ra 中序 12 //lb rb 后序 13 /* 14 int build(int la,int ra,int lb,int rb){ 15 if (la>ra) return 0; 16 int rt = ba[rb]; 17 int p1=la,p2; 18 while(mid[p1]!=rt) p1++; 19 p2=p1-la; 20 e[rt].l=build(la,p1-1,lb,lb+p2-1); 21 e[rt].r=build(p1+1,ra,lb+p2,rb-1); 22 return rt; 23 } 24 */ 25 //la ,ra 先序 26 //lb ,rb 中序 27 int build(int la,int ra,int lb,int rb){ 28 if(lb>rb) return 0; 29 int rt = qi[la]; 30 int p1=lb,p2; 31 while(mid[p1]!=rt) p1++; 32 p2=p1-lb; 33 e[rt].l=build(la+1,la+p2,lb,p1-1); 34 e[rt].r=build(la+p2+1,ra,p1+1,rb); 35 return rt; 36 } 37 /* 38 //先序输出 39 void dfs(int rt){ 40 printf("%d ",rt); 41 if(e[rt].l) dfs(e[rt].l); 42 if(e[rt].r) dfs(e[rt].r); 43 } 44 45 46 */ 47 /* 48 //中序输出 49 void dfs(int rt){ 50 if(e[rt].l) dfs(e[rt].l); 51 printf("%d ",rt); 52 if(e[rt].r) dfs(e[rt].r); 53 } 54 */ 55 /* 56 //后序输出 57 void dfs(int rt){ 58 if(e[rt].l) dfs(e[rt].l); 59 if(e[rt].r) dfs(e[rt].r); 60 printf("%d ",rt); 61 } 62 */ 63 /*
//层序输出
64 void dfs(int s){ 65 queue<int>Q ; 66 vector<int>ve; 67 Q.push(s); 68 while(!Q.empty()){ 69 int u=Q.front(); 70 Q.pop(); 71 ve.push_back(u); 72 if(e[u].l) Q.push(e[u].l); 73 if(e[u].r) Q.push(e[u].r); 74 } 75 for(int i=0;i<ve.size();i++){ 76 printf("%d%c",ve[i],i==ve.size()-1?'\n':' '); 77 } 78 } 79 */ 80 81 int main() 82 { 83 scanf("%d",&n); 84 for(int i=1;i<=n;i++) { 85 scanf("%d",&qi[i]); 86 } 87 for(int i=1;i<=n;i++){ 88 scanf("%d",&mid[i]); 89 } 90 build(1,n,1,n); 91 int rt=qi[1]; 92 dfs(rt);//根 93 return 0; 94 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现