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


#include
#include
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;
}

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

基于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;
}