L2-006. 树的遍历
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数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
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<string> #include<map> #include<queue> #include<stack> #include<set> #include<vector> #include<algorithm> #define MAX 125 using namespace std; struct Node{ int x,l,r; }tree[MAX]; int h[MAX],z[MAX]; int c; int build(int h[],int z[],int len){ int k,i; if(len<=0) return -1; for(i=0;i<len;i++){ if(z[i]==h[len-1]){ k=i; break; } } c++; int root=c; tree[root].x=z[k]; tree[root].l=build(h,z,k); tree[root].r=build(h+k,z+k+1,len-k-1); return root; } void bfs(int x){ int f=0,i; queue<int> q; q.push(x); while(q.size()){ if(f==0){ printf("%d",tree[q.front()].x); f=1; } else printf(" %d",tree[q.front()].x); if(tree[q.front()].l>-1) q.push(tree[q.front()].l); if(tree[q.front()].r>-1) q.push(tree[q.front()].r); q.pop(); } } int main() { int n,i,j; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&h[i]); } for(i=0;i<n;i++){ scanf("%d",&z[i]); } c=0; build(h,z,n); bfs(1); return 0; }
二叉树的遍历
给出一棵二叉树的中序和前序遍历,输出它的后序遍历。
Input
本题有多组数据,输入处理到文件结束。
每组数据的第一行包括一个整数n,表示这棵二叉树一共有n个节点。
接下来的一行每行包括n个整数,表示这棵树的中序遍历。
接下来的一行每行包括n个整数,表示这棵树的前序遍历。
3<= n <= 100
Output
每组输出包括一行,表示这棵树的后序遍历。
Sample Input
7
4 2 5 1 6 3 7
1 2 4 5 3 6 7
Sample Output
4 5 2 6 7 3 1
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<string> #include<map> #include<queue> #include<stack> #include<set> #include<vector> #include<algorithm> #define MAX 405 using namespace std; struct Node{ int x,l,r; }tree[MAX]; int q[MAX],z[MAX]; int c; int build(int q[],int z[],int len){ int k,i; if(len<=0) return -1; for(i=0;i<len;i++){ if(z[i]==q[0]){ k=i; break; } } c++; int root=c; tree[root].x=z[k]; tree[root].l=build(q+1,z,k); tree[root].r=build(q+k+1,z+k+1,len-k-1); return root; } void dfs(int x){ int i; if(x==-1) return; dfs(tree[x].l); dfs(tree[x].r); printf("%d ",tree[x].x); } int main() { int n,i,j; while(~scanf("%d",&n)){ memset(tree,0,sizeof(tree)); for(i=0;i<n;i++){ scanf("%d",&z[i]); } for(i=0;i<n;i++){ scanf("%d",&q[i]); } c=0; build(q,z,n); dfs(1); printf("\n"); } return 0; }
原文地址:https://www.cnblogs.com/yzm10/p/8640974.html
时间: 2024-10-11 23:51:39