读书人

为什么小弟我这样创建二叉树不对?它一

发布时间: 2012-05-11 12:55:37 作者: rapoo

为什么我这样创建二叉树不对?它一直提示输入数值,好像进入了死循环。
#include <stdio.h>
#include <stdlib.h>
typedef struct BinaryNode{
char data;
BinaryNode *left;
BinaryNode *rigth;
}
BinaryTree;
void CreateBinaryTree(BinaryTree *bina)
{

char ch;
printf("请输入节点的数值(.表示该节点为空):\n");
ch = getchar();
if(ch == '.')
bina = NULL;
else
{
bina = (BinaryTree*)malloc(sizeof(BinaryNode));
bina ->data = ch;
CreateBinaryTree(bina ->left);
CreateBinaryTree(bina ->rigth);
}
}
int main()
{
BinaryTree *bina;
bina = (BinaryTree *)malloc(sizeof(BinaryNode));
CreateBinaryTree(bina);
return 0;
}

[解决办法]
printf("请输入节点的数值(.表示该节点为空):\n");
scanf("%c", &ch);//ch = getchar();改成这样,因为有数据残留在缓冲区
[解决办法]

C/C++ code
printf("请输入节点的数值(.表示该节点为空):\n");fflush(stdin);//或者在这儿加句这个ch = getchar();
[解决办法]
你这个代码有很大的问题。
在main()函数中
bina = (BinaryTree *)malloc(sizeof(BinaryNode));
CreateBinaryTree(bina);
也就是bina已经是root节点了,但是在CreateBinaryTree里,有分配了一个
bina = (BinaryTree*)malloc(sizeof(BinaryNode));
而且这两个节点没有任何关系。
[解决办法]
C/C++ code
//bina = (BinaryTree *)malloc(sizeof(BinaryNode));把这句去掉CreateBinaryTree(bina);
[解决办法]
void CreateBinaryTree(BinaryTree* &bina)//这儿改成这个
[解决办法]
按照czh3642210的修改,然后在bina = (BinaryTree*)malloc(sizeof(BinaryNode));后加上
bina->left = 0
bina->right = 0
就应该不会死循环了,你试试
[解决办法]
关键是你没有把创建的孩子节点和父节点连接起来。
C/C++ code
#include <stdio.h>#include <stdlib.h>typedef struct BinaryNode{    char data;    struct BinaryNode *left;    struct BinaryNode *rigth;}BinaryTree;void CreateBinaryTree(BinaryTree **pbina){        char ch;//    printf("请输入节点的数值(.表示该节点为空):\n");    ch = getchar();    if(ch == '.')        *pbina = NULL;    else    {        *pbina = (BinaryTree*)malloc(sizeof(struct BinaryNode));        (*pbina)->data = ch;        CreateBinaryTree(&(*pbina) ->left);        CreateBinaryTree(&(*pbina) ->rigth);    }}void Travel(BinaryTree * T){    if(T != NULL)    {        printf("%c", T->data);        Travel(T->left);        Travel(T->rigth);    }}int main(){     BinaryTree *bina;    bina = (BinaryTree *)malloc(sizeof(struct BinaryNode));    CreateBinaryTree(&bina);    Travel(bina);    return 0;}
[解决办法]
注意 指向指针的指针的使用.. 我当年做二叉树的时候就因为不懂这个东西(当时还不会调试),活生生的看了一个星期的代码,最后还是没做出来...

读书人网 >C语言

热点推荐