首页 > 其他分享 >数据结构实验之求二叉树后序遍历和层次遍历

数据结构实验之求二叉树后序遍历和层次遍历

时间:2022-12-21 12:35:32浏览次数:39  
标签:node 之求 遍历 struct 二叉树 root out


数据结构实验之求二叉树后序遍历和层次遍历


Time Limit: 1000MS Memory limit: 65536K


题目描述


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


输入


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


输出


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


示例输入


2 abdegcf dbgeafc xnliu lnixu


示例输出


dgebfca abcdefg linux xnuli


提示


 


来源


ma6174


示例程序


 


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int L;
struct node
{
int data;
struct node *rchild;
struct node *lchild;
};
struct node *creat(int n,char a[],char b[])
{
struct node *root;
char *p;
if(n==0)
{
return NULL; //返回上一层创建二叉树函数
}
root = (struct node *)malloc(sizeof(struct node));
root->data = a[0];
for(p=b;p!='\0';p++)//在b中找到和a[0]相同的元素,跳出循环
{
if(*p==a[0])
{
break;
}
}
int t=p-b; //记录b中第几个字符与a【0】相同,传参给创建二叉树函数
root->lchild = creat(t,a+1,b);
root->rchild = creat(n-1-t,a+t+1,p+1);
return root;
}
void final(struct node *root)
{
if(root)
{
final(root->lchild);
final(root->rchild);
printf("%c",root->data);
}
}
void Exbition(struct node *root) //层次遍历输出
{
int in,out;
in = out = 0;
struct node *p[100]; //保存数据,从根节点到叶子的数据分层保存下来
p[in++] = root; //保存根上的元素
while(out<in)
{
if(p[out]) //如果访问的结点不为空
{
printf("%c",p[out]->data ); //输出访问的结点元素
p[in++] = p[out]->lchild; //将访问结点的左子树的地址传给下一个输出的节点元素
p[in++] = p[out]->rchild;// 将访问结点的右子树的地址传给下一个输出的节点元素
}
out++;
}
}
int main()
{
char a[55],b[55];
int n,m;
struct node *root;
while(scanf("%d",&n)!=EOF)
{
L=0;
while(n--)
{
scanf("%s%s",a,b);
int k=strlen(a);//记录字符串长度,传参数给创建二叉树。
root = creat(k,a,b);
final(root);//后序遍历输出
printf("\n");
Exbition(root);//层次遍历输出
printf("\n");
}
}
return 0;
}

标签:node,之求,遍历,struct,二叉树,root,out
From: https://blog.51cto.com/u_12606187/5959796

相关文章

  • 数据结构-二叉树遍历非递归
    前序遍历voidpreorder(BTNODEBT){BTNODESTACK[100];inttop=-1;STACK[++top]=BT;BTNODEp=null;while(top!=-1){BTNO......
  • 二叉树的最大/最小深度
    1.深度与高度二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)二叉树节点的高度:指从该节点到叶子节点的最长简单路径......
  • LeetCode 102_二叉树的层序遍历
    LeetCode102:二叉树的层序遍历题目给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]......
  • 剑指offer 二叉树的深度(C++)
    题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。代码实现/*structTreeNode{intval;......
  • 剑指offer 二叉树的镜像(C++)
    问题描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/\610/\/\57911镜像二叉树......
  • LeetCode 有关二叉树的算法题目(C++)
    0、NULL与nullptr的区别在C语言中,​​NULL​​​通常被定义为:​​#defineNULL((void*)0)​​​。因为在C语言中把空指针赋给​​int​​​和​​char​​​指针的时候,发......
  • Lua 5.3 hashint函数缺陷导致遍历table性能非常差
    最近发现线上有个服务器某些逻辑耗时比较久,问了下同事,他告诉我是因为lua的pairs函数很慢导致的。“啊!不至于吧,这数据量才多少”我一脸诧异,记忆中Lua不至于慢到这种程度,遍......
  • LeetCode 44、144、145 使用非递归的方法遍历二叉树
    前序遍历如果要实现二叉的在非递归遍历需要借助栈这个数据结构。因为前序遍历先处理的是根节点再处理左子树和右子树,所以在循环之前需要将根棵树的根节点放入栈中,在循环中......
  • 树转二叉树结点个数问题
    已知一棵有2011个结点的树,其叶结点个数为116,该树对应的二又树中无右孩子的结点的个数是()......
  • Hugo教程#5遍历页面
    首发于Enaium的个人博客引言前面几期视频学习了一些布局和模板语法,其实Hugo的最终用法就是来写个人博客,需要遍历出所有的博客来呈现在网站的主页,Markdown文件都会创......