定时作业-二叉树的建立与遍历

来源:互联网 发布:阿里云账号注销 编辑:程序博客网 时间:2024/05/16 19:44
题目描述
给出一棵二叉树,分别输出先序、中序、后序遍历结果。


输入
第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");}


不想多解释了...

又不是用指针做的所以懒得多说~


1 0