秃头小宝贝 发表于 2020-4-5 23:46:46

关于二叉树的创建问题 具有大大的疑惑

关于二叉树的创立,当存放数据为字符时候为什么会出现如下问题(当出现重复出现的字符时候就是错误了)
typedef struct BinTreeNode *PBinTree;
struct BinTreeNode{

        char info;
        PBinTreeNode llink;
        PBinTreeNode rlink;
};
PBinTree Create(){
        char val;
        scanf("%c", &val);
       
        PBinTree t = (PBinTree)malloc(sizeof(struct BinTreeNode));
        if (val =='0') {
                return NULL;
        }

        else {
                t->info = val;
                printf("请输入'%c'的左节点\n",val);       
                t->llink = Create();
                printf("请输入'%c'的右节点\n",val);
                t->rlink = Create();
        }
       
        return t;}
----------------------------------------
输入A时 输出如下:
A
请输入'A'的左节点
请输入'
'的左节点
------------------------------------------
上面重复了
{
请输入'
'的左节点
}这一段 不知道怎么解决 但如果输入的是整型就一切正常

秃头小宝贝 发表于 2020-4-5 23:48:43

输入整形时候:
typedef struct BinTreeNode *PBinTree;
struct BinTreeNode{

      char info;
      PBinTreeNode llink;
      PBinTreeNode rlink;
};
PBinTree Create(){
        int val;
        scanf("%d", &val);
       
        PBinTree t = (PBinTree)malloc(sizeof(struct BinTreeNode));
        if (val <= 0) {
                return NULL;
        }
       

        if (val > 0) {
                t->info = val;
                printf("请输入'%d'的左节点\n",val);       
                t->llink = Create();
                printf("请输入'%d'的右节点\n",val);
                t->rlink = Create();
        }
       
        return t;}
-----------------------------------------------------------------------------
输出:
3
请输入'3'的左节点
1
请输入'1'的左节点
4
请输入'4'的左节点
0
请输入'4'的右节点
0
请输入'1'的右节点
5
请输入'5'的左节点
0
请输入'5'的右节点
0
请输入'3'的右节点
2
请输入'2'的左节点
0
请输入'2'的右节点
0
中序遍历41532
前序遍历31452
后序遍历45123
--------------------------------
一切正常

啦啦啦13 发表于 2020-4-10 17:25:05

C语言sanf中的%c比较特殊,不会跳过输入值前面的空白
scanf("%c",&c) 与 scanf(" %c",&c),后者只是在%前多了个空格使用起来区别是很大的,
scanf("%c",&c)作单字符输入时规定只接收一个字符,但它却把回车符也作为字符对待的。这个回车符是放在缓冲区的,这就造成程序中第二次调用scanf("%c",&c)是从缓冲区中取一个字符,把第一次调用scanf("%c",&c)后输入的回车当作输入字符了。这就在输入逻辑上造成了混乱。
而scanf(" %c",&c)的这个空格,把缓冲区中的回车当成第一个字符,读取后丢掉。
页: [1]
查看完整版本: 关于二叉树的创建问题 具有大大的疑惑