我试图用C语言递归地创建一棵树。
到目前为止,我已经完成了下面的代码。但在编译时,我得到以下错误信息:;
错误:在非结构或联合中请求成员“esq”
生成树(H-1,p->左,p);
^
错误:在非结构或联合中请求成员“dir”
生成树(H-1,p->右,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);
  }
}

谢谢。

最佳答案

void MakeTree(int H, noh *p, noh *u)
{
  if (H>0)
  {
    *p = malloc(sizeof(nohh));
    (*p)->up = *u;
    MakeTree(H-1, &(*p)->left, p);
    MakeTree(H-1, &(*p)->right, p);
  }
}

这样可以解决您的问题:
您希望递归地执行它,所以不需要while循环。
您需要malloc结构的大小,而不是指针的大小,并将其写入main中原始p的位置。
MakeTree中的p是指向结构指针的指针,因此必须取消引用两次,然后需要成员的地址=>&(*p)->left&(*p)->right
建议:不要调用结构noh和指向它的指针noh,这是不可读的。

10-01 17:53