【发布时间】:2014-10-22 12:20:07
【问题描述】:
我正在尝试在 C 中递归地创建一棵树。
到目前为止,我已经完成了下面的代码。但是在编译时我得到以下错误消息;
错误:在不是结构或联合的东西中请求成员“esq” MakeTree(H-1, p->left, p); ^ 错误:在不是结构或联合的东西中请求成员“dir” MakeTree(H-1, p->right, p); ^
我做错了什么?
#include <stdio.h>
#include <stdlib.h>
typedef struct nohh {
int info;
struct nohh *left;
struct nohh *right;
struct nohh *up;
} nohh, *noh;
void MakeTree(int H, noh *p, noh *u);
int main(){
noh p = NULL;
int h;
printf("What is the Tree height? ");
scanf("%d\n", &h);
MakeTree(h, &p, &p);
return 0;
}
void MakeTree(int H, noh *p, noh *u){
while(H>=0){
p = malloc(sizeof(noh));
(*p)->up = *u;
MakeTree(H-1, p->left, p);
MakeTree(H-1, p->right, p);
}
}
谢谢。
【问题讨论】:
-
noh是指向struct nohh的指针。 -
请完成翻译,然后重新编译并发布错误和代码。
-
p->left应该是&(*p)->left。你对malloc的使用也是错误的。 -
因为 noh 是一个指针,所以你想为结构分配空间,所以
*p = malloc(sizeof(nohh));应该是正确的。 -
@Anton.P @Anton.P
pin MakeTree 是一个指向结构的指针,所以你必须取消引用两次然后你想要成员的地址 =>&(*p)->left