В настоящее время я создаю дерево Хаффмана, заполненное узлами символов, которые читаются из текстового файла, а также количество времени, которое они появляются в текстовом файле (частота).Я создал вектор, который содержит узлы, содержащие прочитанный символ и частоту.Я также отсортировал его так, чтобы вектор находился в порядке убывания и имел узел с наименее частым символом в конце.
Моя проблема: мне нужно получить два узла с наименьшей частотой, и я начал кодировать эту функцию, но не понимаю, как вызвать эту функцию дважды, пока моя функция не получила значение последнего узла дважды.
Желаемый результат: чтобы можно было дважды вызывать мою функцию и создать родительский узел, как в моем коде ниже.
Функция, над которой я работаю, чтобы дважды вызвать и получить узел с наименьшей частотой:
Node * getLeastFrequencyNode(vector<Node *> & v) {
Node * leastfreq = v[0];
for (unsigned i = 1; i < v.size(); i++) {
if ((v[i]->freq) < (leastfreq->freq)) {
leastfreq = v[i];
}
}
return leastfreq;
}
Как я хочу иметь возможность вызывать мою функцию, если один узел:
struct Node {
Node * left;
char ch;
unsigned long long freq;
Node * right;
};
// Get 2 nodes with least frequency
Node* left = getLeastFrequencyNode(v);
Node * right = getLeastFrequencyNode(v);
Node * parent = getNode(-1, left->freq + right->freq);