题目描述
给出一棵二叉树,分别输出先序、中序、后序遍历结果。
输入
第1行:结点数n(1<=n<=100)
以下若干行,每行3个整数,分别表示父结点、左孩子、右孩子。若没有孩子,对应的整数为0.
输出
第1行:树根
第2行:先序遍历结果,数字间用1个空格分开。
第3行:中序遍历结果,数字间用1个空格分开。
第4行:后序遍历结果,数字间用1个空格分开。
样例输入
8
1 2 4
2 0 0
4 8 0
3 1 5
5 6 0
6 0 7
8 0 0
7 0 0
样例输出
3
3 1 2 4 8 5 6 7
2 1 8 4 3 6 7 5
给出一棵二叉树,分别输出先序、中序、后序遍历结果。
输入
第1行:结点数n(1<=n<=100)
以下若干行,每行3个整数,分别表示父结点、左孩子、右孩子。若没有孩子,对应的整数为0.
输出
第1行:树根
第2行:先序遍历结果,数字间用1个空格分开。
第3行:中序遍历结果,数字间用1个空格分开。
第4行:后序遍历结果,数字间用1个空格分开。
样例输入
8
1 2 4
2 0 0
4 8 0
3 1 5
5 6 0
6 0 7
8 0 0
7 0 0
样例输出
3
3 1 2 4 8 5 6 7
2 1 8 4 3 6 7 5
2 8 4 1 7 6 5 3
先说下,先序就是根-左-右,中序就是左-根-右,后序左-右-根
这个嘛...结构体数组分分钟搞定~
嘿嘿嘿.....
直接给代码~不想管格式了嘿嘿嘿~~
#include<cstdio>
struct tree
{
int f,l,r,m;
}tr[105];
int n;
void pr(int x,int num)
{
if(num>n||tr[x].m==0)
return;
printf("%d ",x);
pr(tr[x].l,num+1);
pr(tr[x].r,num+1);
}
void in(int x,int num)
{
if(num>n||tr[x].m==0) return;
in(tr[x].l,num+1);
printf("%d ",x);
in(tr[x].r,num+1);
}
void pt(int x,int num)
{
if(num>n||tr[x].m==0) return;
pt(tr[x].l,num+1);
pt(tr[x].r,num+1);
printf("%d ",x);
}
int main()
{
int i,x,y,z,r;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&z);
tr[x].m=x;
tr[x].l=y;
tr[x].r=z;
if(y)
tr[tr[x].l].f=x;
if(z)
tr[tr[x].r].f=x;
}
for(i=1;i<=n;i++)
if(!tr[i].f)
{
r=i;
printf("%d\n",tr[i].m);
break;
}
pr(r,1);
printf("\n");
in(r,1);
printf("\n");
pt(r,1);
printf("\n");
}
又不是用指针做的所以懒得多说~
本文介绍了一种使用结构体数组实现二叉树先序、中序和后序遍历的方法,并提供了完整的C语言代码示例。通过输入结点数量及各结点的父子关系,程序能够准确找到树根并输出不同遍历方式的结果。
4942

被折叠的 条评论
为什么被折叠?



