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;
}

求二叉树的层次遍历(SDUT 2824)的更多相关文章

  1. 数据结构实验之求二叉树后序遍历和层次遍历(SDUT 2137)

    Problem Description 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历. Input 输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据. ...

  2. LeetCode 102. Binary Tree Level Order Traversal 二叉树的层次遍历 C++

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  3. lintcode : 二叉树的层次遍历II

    题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, ...

  4. lintcode : 二叉树的层次遍历

    题目 二叉树的层次遍历 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历 ...

  5. LintCode 二叉树的层次遍历 II

    中等 二叉树的层次遍历 II 查看执行结果 42% 通过 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 您在真实的面试中是否遇到过这个 ...

  6. 【leetcode-102,107,103】 二叉树的层次遍历

    102. 二叉树的层次遍历 (1过,隐蔽错误花时间很多,简单题目本应很快,下次注意红色错误的地方) 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: ...

  7. 107. 二叉树的层次遍历 II

    107. 二叉树的层次遍历 II 题意 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历). 解题思路 递归:利用前序遍历的思想,在递归过程中 ...

  8. Leetcode 102 二叉树的层次遍历 Python

    二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7],   3   / \ 9 20 ...

  9. LeetCode 107 ——二叉树的层次遍历 II

    1. 题目 2. 解答 与 LeetCode 102 --二叉树的层次遍历 类似,我们只需要将每一层的数据倒序输出即可. 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level ...

随机推荐

  1. 用函数来编写实现strlen()函数功能

    strlen( )函数: 测试字符串实际长度的函数,它的返回值是字符串中字符的个数(不包含’\0’) //strlen( )函数:测试字符串实际长度的函数,它的返回值是字符串中字符的个数(不包含’\0 ...

  2. git忽略而不提交文件的3种情形

    1.从未提交过的文件可以用.gitignore 也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件 该文件只能作用于未跟踪的文件(Untracked Files ...

  3. finally代码块的执行

    try{ //todo }catch(Exception e){ //todo }finally{ //todo } 1.不管try,catch里面的代码快有无return,finally都会执行 2 ...

  4. Java并发与多线程教程(2)

    Java同步块 Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免竞争.本文介绍以下内容: Java同步关键字(synchronzied) ...

  5. Advanced Installer 开始-程序那里增加,快捷方式、卸载软件、官方网站

    .     这个是效果.

  6. java代码实现mock数据

    废话不多说,直接上代码. /** * 发get请求,获取文本 * * @param getUrl * @return 网页context */ public static String sendGet ...

  7. vue使用sass报Modele build failed: TypeError: this.getResolve is not a function at Object.loader...

    项目中使用sass报错,之前一直使用同样的安装方式 cnpm install sass-loader node-sass -D,正常使用没问题,没想到这次同样的方式却报错了,网上查的原因是sass-l ...

  8. 在eclipse导入项目的步骤

    1. Import 2. Next 3. 确定  选中copy projects into workspace    Finish 这样项目就导入进来了. 4.导入jar包 Configure Bui ...

  9. VirtualBox使用

    热键:Right Ctrl 串口 端口编号: COM1 -> /dev/ttyS0 COM2 -> /dev/ttyS1 COM3 -> /dev/ttyS2 COM4 -> ...

  10. validform 自定义校验

    validform虽然很强大,但是依然不能满足我们各种奇葩的校验,这是时候就需要我们自己去手写. vaildform 也是基于jq的,正常我们需要引入5个文件 supply 是我们自定义方法的js文件 ...