Кодирование Хаффмана работает, принимая два элемента с наименьшим значением на каждом шаге.Когда вы впервые вызываете функцию (поскольку ваш MinHeap отсортирован по значению), два элемента с наименьшим значением выталкиваются и «объединяются» в узел принятия решения, который затем помещается обратно в кучу.Этот узел оценивается суммой его дочерних оценок и помещается обратно в кучу.Вставка его обратно в кучу помещает его в нужное место на основе его оценки;если он все еще ниже, чем любые другие элементы, он будет первым, в противном случае он будет где-то еще.
Так что этот алгоритм строит дерево снизу вверх, и к тому времени, когда вы очищаете кучу, вы 'будет полное деревоЯ не понимаю, для чего 'n', хотя;цикл должен быть while (heap.size() > 1)
.Несмотря на это, дерево не является «полным», разные ветви будут иметь разную длину в зависимости от того, как оцениваются частоты элементов в начальной куче.