从二叉树创建链表(前序遍历)
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()
的内部调用之后加入列表)
所以我正在尝试使用前序遍历从二叉树创建链表。 我在做这件事时遇到了很多问题,我看到了一些 "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()
的内部调用之后加入列表)