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,编译结果
图片描述
输入空格,编译结果
图片描述

回答:

scanf("%c",&x); 后面加一句: getchar(); 就可以工作了.

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


另外, 提醒一下你.

printf("\n后序:");InOrder(t);

printf("\n中序:");PostOrder(t);

这里写反了. InOrder 是中序, PostOrder 是后序.

回答:

我打断点简单测了一下,符合我的猜想,即:
先执行

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的创建,进入第二次递归

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

//第二次递归,没有输入,if 判断不符合,在else到printf之间循环递归

作业还是要自己做,其他的帮不了

回答:

一开始就来讨论并不好...

以上是 C语言,数据结构,二叉树的递归构造,求大神教导,使其正常运行。 的全部内容, 来源链接: utcz.com/p/195341.html

回到顶部