[洛谷] P1305 新二叉树+模拟先序遍历二叉树

[洛谷] 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;//不能用scanf和getchar,别问为什么,因为我也不知道;我第一次提交用的就是scanf和getchar
    //然后全WA;难受的不是全WA,而是我把他的样例全过了(包括错误后,洛谷网站上提供的样例),就离谱
    //就很难受,后来在洛谷上发帖求助;经大佬解释后,才知道,洛谷不能用getchar,下面有全WA的代码
    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();//就因为这的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;
 } 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值