所以我试图用preorder transversal从二叉树创建一个链表。
我做这件事有很多问题,我看到了一些“解决方案”,但我不喜欢!我正在尝试一些简单的方法。
这是我到现在为止得到的密码:

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);
  }
}

我总是收到一个空名单!

最佳答案

如果(!a){*l=NULL;}
这将一直是函数中最后一个完成的操作,在*l中的空值一直向上传递。
其他人也有问题:
r=r->下一步;
但你从来没有把r->next设置为任何值。你得先这么做。
此外,当您第一次调用preorder()时,*l指的是什么?最好让函数返回LInt*(在内部调用preorder()之后加入列表),而不是传入LInt*

关于c - 从二叉树创建链表(遍历),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44116715/

10-11 08:55