contributed by <bclegend
>
實做 quick sort 演算法,並以以下 node_t
為 linked list 的基礎架構,排序 linked list 中數值的序列。
pivot
R
往 linked list 左方移動,若 R
指向的位置儲存的數值小於 pivot
,將指標 R
指向位置的數值與指標 L
指向位置的數值交換L
的位置往右方移動,若 L
指向的位置儲存的數值大於 pivot
,將指標 L
指向位置的數值與指標 R
指向位置的數值交換L
與 R
指向同一個位置此時 linkedlist[0] 到 linkedlist[2] 為新的 linked list 1 ,linkedlist[3]為新的 linked list 2 , linkedlist[4] 到 linkedlist[7] 為新的 linked list 3
並將這三個新的 linked list 再繼續排列直到整個 linked list 排列完成
而在我們的實做中,我們利用 struct __node *left, *right;
進行堆疊,堆疊出左方的 linked list left
以及右方的 linked list right
這次的實做中,我們使用的是改變 node
中數值的方式
node_t *begin[max_level], *end[max_level];
時給 max_level
這麼多的空間?Leetcode
在二元樹的構建過程中,我們可以利用不同的排序方式來唯一確定一顆樹的結構。其中,preorder
採用的是"中->左->右"的順序,inorder
採用的是"左->中->右"的順序。如果我們知道這兩種排序方式,就足以建構出唯一的二元樹。
程式的實作方式是利用 Linux 核心的 hash table。在這個實作中,我們首先以preorder的順序找到根節點的值,接著在inorder中找到對應的左子樹和右子樹元素。然後,我們將左右子樹當作新的根節點,再次進行相同的過程,直到找不到對應的元素為止。
在 linux kernel 中 include/linux/types.h
定義 hlist_node
以及 hlist_head
結構如下
hlist_add_head
head
後新增節點find
node_add