[洛谷] P1305 新二叉树
菜鸟生成记(6)
这道题思路不难想到,但是洛谷的判题机代码的写法有要求
用getchar直接全WA
思路:
每一行的第一个字符都是一颗子树的根结点;
第一行的字符为二叉树的根结点
dfs模拟先序遍历二叉树,在遍历过程中直接输出;
AC代码
#include<bits/stdc++.h>
using namespace std;
char s[27][5]={0};
void dfs(int x,int n)
{
printf("%c",s[x][0]);
if(s[x][1]!='*')
{
for(int i=0;i<n;i++)
if(s[i][0]==s[x][1])
{
dfs(i,n);
}
}
if(s[x][2]!='*')
{
for(int i=0;i<n;i++)
if(s[i][0]==s[x][2])
{
dfs(i,n);
}
}
return;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s[i][0]>>s[i][1]>>s[i][2];
}
dfs(0,n);
return 0;
}
全WA了(和AC代码没啥区别,就是用了getchar和scanf)
#include<bits/stdc++.h>
using namespace std;
char s[30][10]={0};
void dfs(int x,int n)
{
printf("%c",s[x][0]);
if(s[x][1]!='*')
{
for(int i=0;i<n;i++)
if(s[i][0]==s[x][1])
{
dfs(i,n);
}
}
if(s[x][2]!='*')
{
for(int i=0;i<n;i++)
if(s[i][0]==s[x][2])
{
dfs(i,n);
}
}
return;
}
int main()
{
int n;
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++)
{
for(int j=0;j<3;j++)
{
scanf("%c",&s[i][j]);
}
getchar();
}
dfs(0,n);
return 0;
}