开发者社区> 问答> 正文

C语言,数据结构,二叉树的递归构造,求大神教导,使其正常运行。

#include <stdio.h>
#include <stdlib.h>

typedef char ElementType ;

struct binaryTreeNode
{
    ElementType data;
    struct binaryTreeNode *LeftChild,*RightChild;
};
typedef struct binaryTreeNode BinaryTreeNode;

void BTreeCreate(BinaryTreeNode **T)
{
    char x;
    scanf("%c",&x);
    if(x == ' ')
        (*T) = NULL;
    else
    {
        (*T) = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));    
        (*T)->data = x;
    /*三行printf用于检验,发现下面printf语句会发生重复,我百思不得其解,求指导*/
        printf("%d\n",(*T));
        printf("%d\n",(*T)->LeftChild);
        printf("%d\n",(*T)->RightChild);

        BTreeCreate(&((*T)->LeftChild));
        BTreeCreate(&((*T)->RightChild));


    }

}

void PreOrder(BinaryTreeNode *t)
{
    if(t)
    {
        printf("%c",t->data);
        PreOrder(t->LeftChild);
        PreOrder(t->RightChild);
    }
}
void InOrder(BinaryTreeNode *t)
{
    if(t)
    {
        InOrder(t->LeftChild);
        printf("%c",t->data);
        InOrder(t->RightChild);
    }
}
void PostOrder(BinaryTreeNode *t)
{
    if(t)
    {
        PostOrder(t->LeftChild);
        PostOrder(t->RightChild);
        printf("%c",t->data);
    }
}
int main(void)
{
    BinaryTreeNode *t; 
    BTreeCreate(&t);

    
    printf("\n先序:");PreOrder(t);
    printf("\n后序:");InOrder(t);
    printf("\n中序:");PostOrder(t);
    
    printf("\n");

    return 0;
}

输入a,编译结果
screenshot
screenshot

展开
收起
a123456678 2016-06-12 10:31:00 1944 0
1 条回答
写回答
取消 提交回答
  • 在 scanf("%c",&x); 后面加一句: getchar(); 就可以工作了.

    原因是, 你每次敲的回车, 还在输入缓存里, 下一次递归, 会跳过输入过程, 直接将 x 获取为 'n'. 所以会输出两遍...

    2019-07-17 19:33:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何使用Tair增强数据结构构建丰富在线实时场景 立即下载
Apache Flink 流式应用中状态的数据结构定义升级 立即下载
低代码开发师(初级)实战教程 立即下载