我想将二叉搜索树展平为单链表。展开二进制搜索到单链表[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) {
...
}
我似乎无法弄清楚如何将它扁平化为一个单独的链表。我已经看到很多其他线程和站点讨论将二叉搜索树转换为双向链表或循环链表,但没有关于将值复制到单个链接列表中的问题。如果任何人都可以提出建议,我可以如何完成这一点,我会非常感激。这是一个家庭作业的任务,所以如果你还可以提供一个小的解释来帮助我学习这将是伟大的。
查找 “中序遍历”。 – 2013-04-11 02:12:14
@CarlNorum我实际上试图使用inorder遍历实现扁平化,但我无法弄清楚要在哪些位置设置列表,以及在哪里创建新的列表节点。 – kyle 2013-04-11 02:23:04