我想將二叉搜索樹展平爲單鏈表。展開二進制搜索到單鏈表[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