题目大意
- 给出n组父子关系,要求构成一棵树;
- 输出这棵树的前序遍历。
题目分析
解题思路:
- 结构体记录一个点的左儿子 s1,右儿子 s2;
- 直接将关系连接起来;
- 递归输出就好:先根,再左右。
代码:
//luogu1305:新二叉树
//建树
//输出前序遍历
#include<bits/stdc++.h>
using namespace std;
int n,ro;
char s[205];
struct tre{int s1,s2;}a[205];
void dfs(int k)//递归输出 (前序遍历)
{
if(k=='*') return ;
printf("%c",k);//根
dfs(a[k].s1);//左
dfs(a[k].s2);//右
}
int main()
{
scanf("%d",&n);
//根节点
scanf("%s",s+1);
ro=s[1];
a[ro].s1=s[2];
a[ro].s2=s[3];
//非根节点
for(int i=2;i<=n;i++)
{
scanf("%s",s+1);
a[s[1]].s1=s[2];//记录左儿子
a[s[1]].s2=s[3];//记录右儿子
}
//递归输出
dfs(ro);
return 0;
}