Получить два узла с наименьшей частотой и создать для них родительский узел (дерево Хаффмана) - PullRequest
0 голосов
/ 05 марта 2019

В настоящее время я создаю дерево Хаффмана, заполненное узлами символов, которые читаются из текстового файла, а также количество времени, которое они появляются в текстовом файле (частота).Я создал вектор, который содержит узлы, содержащие прочитанный символ и частоту.Я также отсортировал его так, чтобы вектор находился в порядке убывания и имел узел с наименее частым символом в конце.

Моя проблема: мне нужно получить два узла с наименьшей частотой, и я начал кодировать эту функцию, но не понимаю, как вызвать эту функцию дважды, пока моя функция не получила значение последнего узла дважды.

Желаемый результат: чтобы можно было дважды вызывать мою функцию и создать родительский узел, как в моем коде ниже.

Функция, над которой я работаю, чтобы дважды вызвать и получить узел с наименьшей частотой:

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);
...