哈夫曼樹(二)之 C++詳解
阿新 • • 發佈:2018-12-30
/* * 建立Huffman樹 * * 引數說明: * a 權值陣列 * size 陣列大小 * * 返回值: * Huffman樹的根節點 */ template <class T> void Huffman<T>::create(T a[], int size) { int i; HuffmanNode<T> *left, *right, *parent; MinHeap<T> *heap = new MinHeap<T>(); // 建立陣列a對應的最小堆 heap->create(a, size); for(i=0; i<size-1; i++) { left = heap->dumpFromMinimum(); // 最小節點是左孩子 right = heap->dumpFromMinimum(); // 其次才是右孩子 // 新建parent節點,左右孩子分別是left/right; // parent的大小是左右孩子之和 parent = new HuffmanNode<T>(left->key+right->key, left, right, NULL); left->parent = parent; right->parent = parent; // 將parent節點資料拷貝到"最小堆"中 if (heap->copyOf(parent)!=0) { cout << "插入失敗!" << endl << "結束程式" << endl; destroy(parent); parent = NULL; break; } } mRoot = parent; // 銷燬最小堆 heap->destroy(); delete heap; }