我正在尝试将二叉搜索树展平为单链表。
二叉搜索树:
6
/ \
4 8
/ \ \
1 5 11
/
10
扁平单链表:
1 -> 4 -> 5 -> 6 -> 8 -> 10 -> 11
由于某种原因,我似乎无法弄清楚这一点。
我有一个树节点的结构:
typedef stuct node {
int key;
struct node *left;
struct node *right;
} Node;
我有一个函数来创建和分配内存到树节点:
Node* newNode (int key) {
Node *new = malloc (sizeof(Node));
new->left = NULL;
new->right = NULL;
new->key = key;
return new;
}
我有一个列表节点的结构:
typedef struct list {
int key;
struct list* next;
} List;
我有一个创建列表节点的功能:
List* newListNode (int key) {
List *new = malloc(sizeof(List));
new->key = key;
new->next = NULL;
return new;
}
我有工作函数来创建二叉搜索树、插入值等,但现在我需要创建一个函数来将树展平为列表。
List* flattenToLL(Node* root) {
...
}
我似乎无法弄清楚如何将其展平为单链表。我已经看到很多其他线程和站点讨论将二叉搜索树转换为双向或循环链表,但没有关于将值复制到单链表。如果有人可以就我如何实现这一点提出建议,我将不胜感激。这是一个家庭作业,所以如果你也可以提供一个小的解释来帮助我学习,那就太好了。