从二叉树创建链表(前序遍历)

Creating a linked list from a binary tree (preorder tranversal)

所以我正在尝试使用前序遍历从二叉树创建链表。 我在做这件事时遇到了很多问题,我看到了一些 "solutions" 但我不喜欢它!我正在尝试一些简单的事情。

这是我到现在为止得到的代码:

typedef struct nodo {
  int value;
  struct nodo *left, *right;
} *ABin;

typedef struct lligada { 
  int value;
  struct lligada *next;
} *LInt;

void preorder (ABin a, LInt * l) {

  LInt r=*l,tmp;
  tmp=r;

  if (!a) {
    *l=NULL;
}
  else {
    r=malloc(sizeof(struct lligada));
    r->value=a->value;
    r=r->next;
    *l=tmp;
    preorder (a->left,l);
    preorder (a->right,l);
  }
}

我总是得到一个空列表!

if (!a) { *l=NULL; }

这将始终是您函数中完成的最后一件事,*l 中的 null 将一直向上传递。

其余也有问题:

r=r->next;

但您从未将 r->next 设置为任何内容。你必须先这样做。

此外,当您第一次调用 preorder() 时,*l 指向什么?你可能会更好,而不是传递一个 LInt*,让函数 return 一个 Lint*(在对 preorder() 的内部调用之后加入列表)