递归小错误(建立二叉树)

来源:百度知道 编辑:UC知道 时间:2024/09/21 12:25:37
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}node,size;
node *init(node *T)
{
T=(node *)malloc(sizeof(size));
printf("shuru ");
scanf("%c",&T->data);
if(T->data=='0')
return T;
else
{
T->lchild=init(T->lchild);
T->rchild=init(T->rchild);
}
}

void main()
{
node ss;
init(&ss);

}

改修如下:
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}*node,size; //change node to *node

//node *init(node *T)
bool init(node &T)
{
//T=(node *)malloc(sizeof(size));
//printf("shuru ");
//scanf("%c",&T->data);

char ch;
//printf("shuru ");
scanf("%c",&ch);

//if(T->data=='0')
//return T;
if(ch=='0')
T=NULL;
else
{
T=(node)malloc(sizeof(size)); //ADD
if( !T ) exit(1); //ADD
T->data=ch; //ADD

//T->lchild=init(T->lchild);
//T->rchild=init(T->rchild);
init(T->lchild);
init(T->rchild);
}

return true; //ADD
}

void main()
{
node ss;
//init(&ss);
init(ss);

}

主要问题有两个:
1. 函数参数使用一级指针只能修改该指针所指普通变量的内容;二级指针变量做参数才能通过该参数传回去申请到的地址