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

本文介绍了一种使用结构体数组实现二叉树先序、中序和后序遍历的方法,并提供了完整的C语言代码示例。通过输入结点数量及各结点的父子关系,程序能够准确找到树根并输出不同遍历方式的结果。
题目描述
给出一棵二叉树,分别输出先序、中序、后序遍历结果。


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


不想多解释了...

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


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值