这个题是我写的第一个关于二叉树的题,大概是了解了什么是二叉树,一开始我只看了啊哈算法里面的东西,但是那里面都是完全二叉树的,用线性存储来存储数据的。。。
# 新二叉树
## 题目描述
输入一串二叉树,输出其前序遍历。
## 输入格式
第一行为二叉树的节点数 n。(1 \leq n \leq 26)
后面 n 行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。
空节点用 * 表示
## 输出格式
二叉树的前序遍历。
## 样例 #1
### 样例输入 #1
6
abc
bdi
cj*
d**
i**
j**
### 样例输出 #1
abdicj
思路:因为这个题数据比较小,我使用的是通过dfs暴力枚举的方式来枚举出每种情况,开始我们输入三个字符时,当输入的第一个字符我们把它当作第一个节点,也就是父节点,然后用结构体将父节点的ASCII码作为我们输入其他两个节点的下标,剩下输入的两个字符作为子节点存放到父节点对应的结构体中,(需要注意,要将第一个父节点单独拿出来作为第一次dfs),然后我们在dfs中进行判断,如果不是 * 我们就直接输出,然后进行左节点的dfs,左节点的全部输出完后,再进行右节点的输出
#include<bits/stdc++.h>
using namespace std;
struct arr{
char r,l;
}tree[200];
void dfs(char f)
{
if(f=='*')
return ;
cout<<f;
dfs(tree[f].l);
dfs(tree[f].r);
}
int main()
{
int n;
cin>>n;
char a,b,c,f;
for(int i=0;i<n;i++)
{
cin>>a;
cin>>tree[a].l>>tree[a].r;
if(i==0)
f=a;
}
dfs(f);
}