思路
这道题的数据很水,准确说是有个bug——第一组数据一定是根节点和他的左右子节点,而先先序遍历的特点正是根左右的类深搜模式,于是只要先输出根,然后找到以根的左节点为父节点的节点,输出之,再找以此节点的左节点为父节点的节点,输出之......以此类推,直到不在有左节点,然后返回上一步,对右节点进行同样的操作,没有节点后就在返回,继续搜索其父节点的右节点......以此类推,直到返回到根节点的右节点,并将其搜索完,最后,返回根节点,递归结束。
这很明显是个递归的过程:
若参数非'*',则先输出参数,然后找到参数当父节点的节点组,再对这个参数组的左右节点的值进行递归即可。
这道题名曰树,但实际上就是一道递归题,无需建树~~~
Code
#include<iostream>
using namespace std;
int n;
char a[30][3];
void f(char x)
{
if(x!='*')
{
cout<<x;
for(int i=1;i<=n;i++)
if(a[i][0]==x)
{
f(a[i][1]);
f(a[i][2]);
}
}
return;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i][0]>>a[i][1]>>a[i][2];
f(a[1][0]);
return 0;
}