法一:
一级指针+return
代码:
ss* creat(tree T) {
char ch;
printf("ch=");
scanf("%c", &ch);
getchar();
if (ch == '#') {
T = NULL;
}
else {
T = (tree)malloc(sizeof(ss));
T->data = ch;
T->left = creat(T->left);
T->right = creat(T->right);}
return T;
}
为什么需要返回:
返回指针T才能建立其递归前后的联系,关键在于malloc的使用改变了T指针原来指向的内容,会使T指针指向新开辟的内存空间,从而断开与之前内容的联系,因此需要在新内存创建赋值完成后返回T指针的地址从而与之前的部分进行连接,从而保证的二叉树的连续性和完整性。
法二:
二级指针
代码:
void creat(tree* T)
{
char ch;
printf("ch=");
scanf("%c", &ch);
getchar();
if (ch == '#') {
*T = NULL;
}
else {
(*T) = (tree)malloc(sizeof(ss));
(*T)->data = ch;
creat(&((*T)->lchild));
creat(&((*T)->rchild));
}
}
因为需要对指针的内容进行修,同时又要保证形参和实参的同一性,所以在对普通变量修改是用一级指针,对一级指针修改就需要用二级指针,可参考之前写的对二级指针的简单理解。(*T就是指针指向的空间的地址。)