Blue的成长日记 2023-11-19 11:42 采纳率: 92.3%
浏览 3
已结题

写一个东东时,所遇到的关于c语言的问题

这是我们要求:

img


这是我遇到的bug然后问题就是进入递归时第一次进入递归没办法从键盘输入值,得第二次才可以从键盘输入值这样就导致了会打印两篇printf

img

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    char data ;
    struct Node *L ;
    struct Node * r;
}BiTNode,*BiTree ;
//建立二叉链表方式存储二叉树
void CreateBiTree(BiTree *bt)
{
    char ch;
    printf("请输入节点的值:");//节点值为字符
    scanf("%c",&ch);
    if (ch == '.')
    {
        *bt = NULL;
    }
    else
    {
        *bt = (BiTree)malloc(sizeof(BiTNode));
        (*bt)->data = ch;
        (*bt)->L = NULL; // 需要将左右子树初始化为空
        (*bt)->r = NULL;
        CreateBiTree(&((*bt)->L));
        CreateBiTree(&((*bt)->r));
    }
}

//先序
void PreOrder(BiTree root)
{
    if(root!=NULL)
    {
    printf("%c",root->data);
    PreOrder(root->L);
    PreOrder(root->r);
    }
}
//中序
void InOrder(BiTree root)
{
    if(root!=NULL)
    {
    InOrder(root->L);
    printf("%c",root->data);
    InOrder(root->r);
    }
}
//后序
void PostOrder(BiTree root)
{
    if(root!=NULL)
    {
    PostOrder(root->L);
    PostOrder(root->r);
    printf("%c",root->data);
    }
}
int main()
{
    BiTree root;
    printf("二叉链表:\n");
    CreateBiTree(&root);
    printf("先序\n");
    PreOrder(root);
    printf("\n中序");
    InOrder(root);
    printf("\n后序");
    PostOrder(root);
    system("pause");
    return 0;
}


以上是我的代码

  • 写回答

3条回答 默认 最新

  • 关注

    CreateBiTree函数中,scanf("%c",&ch)这一行下面加一句getchar();来吸收回车符。
    如下图所示:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月27日
  • 已采纳回答 11月19日
  • 创建了问题 11月19日

悬赏问题

  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 这个冒泡法的代码错在哪里?
  • ¥15 下列c语言代码为何输出了多余的空格
  • ¥15 kali linux用wget archive.kali.org/archive-key.asc指令下载签名无效(失败)
  • ¥15 openHarmony 利用c++程序在dayu210开发板上实现拉取RTSP视频流并且在屏幕上显示
  • ¥15 GD32H757的can通信配置
  • ¥20 nist随机数测试的问题
  • ¥20 帮我解决这个项目,thank you各位程序员
  • ¥15 哪位能用ea软件做一下,有偿