首页 > 学院 > 开发设计 > 正文

5-10 树的遍历

2019-11-08 00:57:25
字体:
来源:转载
供稿:网友
时间限制:400ms内存限制:64MB代码长度限制:16kB判题程序:系统默认作者:陈越单位:浙江大学

给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式:

输入第一行给出一个正整数NNN(≤30/le 30≤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>int mid[60],h[60];typedef struct node{ char data; struct node*l,*r;}tree;tree *creat(int len,int *mid,int *h){ if(len<=0) return NULL; int i,j; tree *t; t=(tree *)malloc(sizeof(tree)); t->data=h[len-1]; for(i=0;i<len;i++) { if(mid[i]==h[len-1]) break; } t->l=creat(i,mid,h); t->r=creat(len-i-1,mid+i+1,h+i); return t;}void show(tree *t){ tree *q[105],*p; int in=0,out=0; if(!t) return ; q[in++]=t; while(out<in) { p=q[out++]; if(out==1) PRintf("%d",p->data ); else printf(" %d",p->data); if(p->l) q[in++]=p->l; if(p->r) q[in++]=p->r; }}int main(int argc, char const *argv[]){ int n,i; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&h[i]); } for(i=0;i<n;i++) { scanf("%d",&mid[i]); } tree *root; root=creat(n,mid,h); show(root); return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表