【问题标题】:Creating a linked list from a binary tree (preorder tranversal)从二叉树创建链表(前序遍历)
【发布时间】:2017-05-22 15:23:49
【问题描述】:

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

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

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

我总是得到一个空列表!

【问题讨论】:

    标签: c linked-list binary-tree preorder


    【解决方案1】:

    如果 (!a) { *l=NULL; }

    这总是你的函数中完成的最后一件事,*l 中的 null 一直向上传递。

    剩下的也有问题:

    r=r->下一个;

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

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

    【讨论】:

    • 我愿意,但我无法更改声明。它是由我的老师实施的。
    • void preorder(ABin a, LInt *l) { LInt b = correct_preorder(a); *l = b; } 然后代码correct_preorder() 类似于您的代码。
    猜你喜欢
    • 2012-12-26
    • 2021-03-08
    • 2011-07-09
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2017-08-23
    相关资源
    最近更新 更多