Problem Description

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


Input

输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。


Output

每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列。


Sample Input

2

abdegcf

dbgeafc

xnliu

lnixu


Sample Output

dgebfca

abcdefg

linux

xnuli

/** 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;
}
}
}
void postorder_traversal(struct node *root) // 后序遍历,顺序:左子树-右子树-根
{
if(root)
{
postorder_traversal(root->lc);
postorder_traversal(root->rc);
printf("%c",root->data);
}
}
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);
postorder_traversal(root);
printf("\n");
level_traversal(root);
printf("\n");
}
return 0;
}

数据结构实验之求二叉树后序遍历和层次遍历(SDUT 2137)的更多相关文章

  1. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

  2. 二叉树后序遍历的非递归算法(C语言)

    首先非常感谢‘hicjiajia’的博文:二叉树后序遍历(非递归) 这篇随笔开启我的博客进程,成为万千程序员中的一员,坚持走到更远! 折磨了我一下午的后序遍历中午得到解决,关键在于标记右子树是否被访问 ...

  3. PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次)

    前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次.要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历.中序遍历.后序遍历.具体说明如下: 前序遍 ...

  4. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  5. <二叉树的基本操作(有层次遍历)>

    #include<stdio.h> #include<stdlib.h> #include<string.h> #define num 100 #define OK ...

  6. LeetCode:145_Binary Tree Postorder Traversal | 二叉树后序遍历 | Hard

    题目:Binary Tree Postorder Traversal 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...

  7. lintcode.68 二叉树后序遍历

    二叉树的后序遍历    描述 笔记 数据 评测 给出一棵二叉树,返回其节点值的后序遍历. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返 ...

  8. [Leetcode] Binary tree postorder traversal二叉树后序遍历

    Given a binary tree, return the postorder traversal of its nodes' values. For example:Given binary t ...

  9. 剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 一 . 题目分析 首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过1,那么他就是一颗平衡二叉树.如下图: 所以 ...

随机推荐

  1. python pyyaml 使用教程(代码案例)

    test.py 内容 # 运行前,请先安装pyyaml模块 # pip3 install -i https://pypi.douban.com/simple/ pyyaml==5.1.1 import ...

  2. Redis获得bigkey扫描脚本

    众所周知,redis里面的大key存在是非常危险的一件事情.因为最近的工作转移到中间件相关的工作,因此关注了一下bigkey的扫描方法.首先介绍一下阿里云提供的扫描脚本:具体可见:https://yq ...

  3. 牛客 197C 期望操作数

    大意: 给定$x,q$, 每步操作$x$等概率变为$[x,q]$中任意一个数, 求变为$q$的期望操作数. 很容易可以得到$f(x,q)=\frac{\sum\limits_{i=x+1}^qf(i, ...

  4. sqlce基本语法

    整理和总结一下SQLCE的用法引用  System.Data.SqlServerCe(1)数据库文件的创建     SqlCeEngine eng = new SqlCeEngine("Da ...

  5. WebStorm使用码云插件问题

    由于项目需求,需要在WebStorm中使用码云插件,在下载安装的过程中出现一系列的问题,现总结出现的问题和解决方法. 先说一下码云是什么?码云有什么作用? 码云的主要功能: 码云除了提供最基础的 Gi ...

  6. java中数组的定义

    1. 一维数组 int[] arr = new int[3];//需要一个容器,但是暂时不给具体的数值 int[] arr = new int[3]{1,2,3};//直接给定具体数值 int[] a ...

  7. 【51nod2026】Gcd and Lcm(杜教筛)

    题目传送门:51nod 我们可以先观察一下这个$f(x)=\sum_{d|x}\mu(d) \cdot d$. 首先它是个积性函数,并且$f(p^k)=1-p \ (k>0)$,这说明函数$f( ...

  8. Django—logging日志

    简介 Django使用python自带的logging 作为日志打印工具.简单介绍下logging. logging 是线程安全的,其主要由4部分组成: Logger 用户使用的直接接口,将日志传递给 ...

  9. 树的总结(遍历,BST,AVL原型,堆,练习题)

    目录 树 一.抽象数据类型 二.二叉树的性质 三.二叉树的遍历 三.活用树的遍历 四.BST树 五.AVL树 六.BST树和AVL树练习 七.堆 树 @ 一.抽象数据类型 1.顺序存储 使用数组存储 ...

  10. 01—mybatis开山篇

    什么是 MyBatis ?        MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.M ...