哈夫曼樹(一)之 C語言詳解
阿新 • • 發佈:2018-12-30
/* * 建立Huffman樹 * * 引數說明: * a 權值陣列 * size 陣列大小 * * 返回值: * Huffman樹的根 */ HuffmanNode* create_huffman(Type a[], int size) { int i; HuffmanNode *left, *right, *parent; // 建立陣列a對應的最小堆 create_minheap(a, size); for(i=0; i<size-1; i++) { left = dump_from_minheap(); // 最小節點是左孩子 right = dump_from_minheap(); // 其次才是右孩子 // 新建parent節點,左右孩子分別是left/right; // parent的大小是左右孩子之和 parent = huffman_create_node(left->key+right->key, left, right, NULL); left->parent = parent; right->parent = parent; // 將parent節點資料拷貝到"最小堆"中 if (dump_to_minheap(parent)!=0) { printf("插入失敗!\n結束程式\n"); destroy_huffman(parent); parent = NULL; break; } } // 銷燬最小堆 destroy_minheap(); return parent; }