所以我试图用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/