【暂无】二叉树 二叉树的三种遍历(binary-tree.cpp)

本文详细介绍了一道关于二叉树遍历的经典算法题目。通过给出的二叉树结构,文章演示了如何找到树的根节点,并实现了先序、中序和后序遍历的递归算法。此外,还提供了完整的AC代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树的建立与遍历(binary-tree)

题目描述
给出一棵二叉树,分别输出先序、中序、后序遍历结果。

输入
第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

    这道题其实很像深搜,但是有三种输出,所以要写三个深搜,至于根节点,就是唯一一个没有父亲的啦~AC代码:

#include<cstdio>
struct Tree
{
	int f;
	int l,r;
}tree[105];
int n,g,c;
void fron(int x)
{	
	if(c==1)
	{
		printf(" ");
	}
	printf("%d",x);
	c=1;
	if(tree[x].l)
	{
		fron(tree[x].l);
	}
	if(tree[x].r)
	{
		fron(tree[x].r);
	}
}
void midd(int x)
{	
	if(tree[x].l)
	{
		midd(tree[x].l);
	}
	if(c==1)
	{
		printf(" ");
	}
	printf("%d",x);
	c=1;
	if(tree[x].r)
	{
		midd(tree[x].r);
	}
}
void back(int x)
{	
	if(tree[x].l)
	{
		back(tree[x].l);
	}
	if(tree[x].r)
	{
		back(tree[x].r);
	}
	if(c==1)
	{
		printf(" ");
	}
	printf("%d",x);
	c=1;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int a,b,c;
		scanf("%d %d %d",&a,&b,&c);
		tree[a].l=b;
		tree[a].r=c;
		tree[b].f=tree[c].f=a;
	}
	for(int i=1;i<=n;i++)
	{
		if(tree[i].f==0)
		{
			g=i;
			break;
		}
	}
	printf("%d\n",g);
	fron(g);
	printf("\n");
	c=0;
	midd(g);
	printf("\n");
	c=0;
	back(g);
	printf("\n");
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值