struct Node { int weight; int parent; int lChild; int rChild; }; typedef struct Node NODE; typedef NODE *HuffmanTree; int selector(HuffmanTree HT, int n) { int min = -1; bool first = true; for (int i = 1; i <= n; i++) { if (HT[i].parent == 0) { if (first) // 只有在 min 即將第一次被賦值的時候,纔會進入 { min = i; first = false; } else { // min 已經被賦值過了,進入這個分支 if (HT[i].weight < HT[min].weight) { min = i; } } } } return min; } // 從沒有選過的樹裏面,選擇兩個weight最小的。把他們的下標放在 s1和s2所在的空間 bool select(HuffmanTree HT, int *s1, int *s2, int n) { int min = selector(HT, n); if (min == -1) return false; HT[min].parent = -1; // 設置一個值,臨時地表示這個節點已經被選中了 int subMin = selector(HT, n); if (subMin == -1) return false; HT[min].parent = 0; // 恢復未被選中的狀態 *s1 = min; // 左邊的比較小 *s2 = subMin; // 右邊的大一點 return true; }