泽洛根 2023-04-17 16:59 采纳率: 100%
浏览 17
已结题

二叉树链表创建陷入死循环


#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    char data;
    struct Node *lc;
    struct Node *rc;
}BiTNode,*BiTree;
void  CreateBiTree(BiTree &T)
{
    char key; 
    scanf("%c",&key);
    if(key=='0')
    {
        T=NULL;
    }else
    {
        T=(Node*) malloc (sizeof(Node));
        T->data=key;
        CreateBiTree(T->lc);
        CreateBiTree(T->rc);
    }
}
int main()
{
    BiTree root;
    printf("请先序输入字符(以0表示叶节点下无数据):\n");
    CreateBiTree(root);
    printf("创建成功");
    return 0;
}

请问为什么这样创建二叉树会重复陷入循环,无法弹出创建成功的提示

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-04-17 17:39
    关注

    基于Monster 组和GPT的调写:

    • 在每次递归调用CreateBiTree函数时,都会重新读取一个字符,而且不会跳过前面的空格和换行符。这可能会导致读取到空格和换行符而无法继续读取输入。试在读取字符后使用getchar()函数来消耗输入流中的空格和换行符。

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct Node
    {
        char data;
        struct Node *lc;
        struct Node *rc;
    }BiTNode,*BiTree;
    
    void CreateBiTree(BiTree &T)
    {
        char key;
        scanf(" %c", &key);  // 前面加空格,跳过空格和换行符
        if(key == '0')
        {
            T = NULL;
        }
        else
        {
            T = (Node*) malloc (sizeof(Node));
            T->data = key;
            CreateBiTree(T->lc);
            CreateBiTree(T->rc);
        }
    }
    
    int main()
    {
        BiTree root;
        printf("请先序输入字符(以0表示叶节点下无数据):\n");
        CreateBiTree(root);
        printf("创建成功");
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?