Свести бинарный поиск по порядку односвязных списков [C]
Я пытаюсь свести бинарное дерево поиска к односвязному списку.
Двоичное дерево поиска:
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) {
...
}
Я просто могуКажется, я не могу понять, как свести его к односвязному списку. Я видел много других тем и сайтов, обсуждающих преобразование бинарного дерева поиска в двоякий или циклически связанный список, но ни одного о копировании значений в односвязный список. Если кто-то может высказать предложения о том, как я могу сделать это, я был бы очень признателен. Это для домашнего задания, так что, если вы также можете дать небольшое объяснение, чтобы помочь мне учиться, это было бы здорово.