开发者社区 问答 正文

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,编译结果

展开
收起
a123456678 2016-06-08 22:57:06 2438 分享 版权
1 条回答
写回答
取消 提交回答
  • 我打断点简单测了一下,符合我的猜想,即:
    先执行

    BTreeCreate(&t);
    第一次递归,走的是

    char x;
    scanf("%c",&x);
    if(x == ' ')//不符合
        (*T) = NULL;
    else
    {
    //进入else
        (*T) = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));    
        (*T)->data = x;
    /*三行printf用于检验,发现下面printf语句会发生重复,我百思不得其解,求指导*/
    //输入a之后,走下面的代码(若没有输入就会在else到printf之间循环递归)
    //打印第一次printf
        printf("%d\n",(*T));
        printf("%d\n",(*T)->LeftChild);
        printf("%d\n",(*T)->RightChild);

    //执行LeftChild的创建,进入第二次递归

    2019-07-17 19:32:52
    赞同 展开评论
问答分类:
问答地址: