Problem Description

已知一颗二叉树的前序遍历和中序遍历,求二叉树的层次遍历。


Input

输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。


Output

每组输出这颗二叉树的层次遍历。


Sample Input

2

abc

bac

abdec

dbeac


Sample Output

2

abc

bac

abdec

dbeac

/** By Mercury_LC */
/** https://blog.csdn.net/Mercury_Lc */
#include <stdio.h>
#include <stdlib.h>
#include <string.h> struct node
{
char data; // 储存字符
struct node *lc, *rc; // 左右节点
};
char preorder[100]; // 前序
char inorder[100]; // 中序
struct node *creat(int len, char *preorder, char *inorder) /* 根据前序中序建立二叉树*/
{
struct node *root;
int i;
if(len == 0) return NULL; // 如果长度为零,则不能建树
root = (struct node*)malloc(sizeof(struct node)); // 申请新的节点
root -> data = preorder[0]; // 前序的顺序第一个一定是根节点
for(i = 0; i < len; i ++) // 寻找中序中到根节点,即现在的这颗树的所有左子树
{
if(inorder[i] == preorder[0])break; // 找到跳出循环
}
root -> lc = creat(i, preorder + 1, inorder); // 建左子树
root -> rc = creat(len - i - 1, preorder + i + 1, inorder + i + 1); // 建右子树
return root; // 返回根节点。
}; void level_traversal(struct node *root) /* 层次遍历*/
{
if(root == NULL) return; // 树不存在
struct node *queue[10005], *now; // 建立队列
int front = 0; // 队首、尾初始化
int rear = 0;
queue[rear ++] = root; // 入队
while(front < rear)
{
now = queue[front ++]; // 出队
printf("%c", now -> data);
if(now -> lc != NULL) // 左子树
{
queue[rear++] = now -> lc;
}
if(now -> rc != NULL) // 右子树
{
queue[rear++] = now -> rc;
}
}
} int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%s%s",preorder,inorder);
struct node *root;
int len = strlen(preorder);
root = creat(len,preorder,inorder);
level_traversal(root);
printf("\n");
}
return 0;
}

最新文章

  1. Anti XSS 防跨站脚本攻击库
  2. NC营改增
  3. 【Codeforces 707A】Brain&#39;s Photos 水题
  4. CSS立体标签实现
  5. Unsupported major.minor version 51.0 在配置/运行Maven工程时,JDK与Maven所引用的jdk版本不一致
  6. ImportError: No module named setuptools
  7. 持久化消息队列memcacheq的安装配置
  8. 使用C#画图(饼图折线图)
  9. linux下安装apache2.2.27
  10. 【计算机视觉】基于行为的ReID演示
  11. Linux学习之less命令
  12. hdu1046
  13. php json数据 入库时 转义字符丢失
  14. Photoshop 基础七 位图 矢量图 栅格化
  15. 重写$.ajax方法
  16. 惊不惊喜, 用深度学习 把设计图 自动生成HTML代码 !
  17. flex布局 (引用阮一峰老师的flex布局-语法篇)
  18. monitorix(linux)系统和网络监控公工具
  19. Type.Missing和System.Reflection.Missing.Value
  20. [UE4]ChildActor组件

热门文章

  1. c c++各种类型的取值范围
  2. oracle基本查询01
  3. python selenium5 模拟点击+拖动+按照指定相对坐标拖动 58同城验证码
  4. Python的global指令的作用
  5. python+requests模拟登陆 学校选课系统
  6. HTML中由于DIV(块元素)浮动,导致的父元素高度塌陷问题的解决方案
  7. nodeJS中使用mongoose模块操作mongodb数据库
  8. asp.net ListView控件的简单实用和配置
  9. 在vue中引用echarts导致Cannot read property getAttribute of null ?
  10. 【Java并发】锁机制