Cтруктура node имеет в своих полях указатели на node
struct node {
node() {};
frequency data;
node *left;
node *right;
};
В программе после того, как я добавляю один экземпляр переменной типа node, ее правый узел ссылается сам на себя (хранит те же данные, что и сама переменная)
while (nodes.size() > 2) { // формирование дерева
node *n1 = new node; // извлекаемые узлы
node *n2 = new node;
n1 = &nodes[nodes.size() - 1];
n2 = &nodes[nodes.size() - 2];
nodes.pop_back();
nodes.pop_back();
node n; // новый узел, соединяющий два извлеченных узла с их суммарной частотой
n.data.c.second = n1->data.c.second + n2->data.c.second;
n.left = n1;
n.right = n2;
nodes.push_back (n); // после этой операции n.right копирует n
int i = nodes.size() - 1;
while (i > 1 && nodes[i].data.c.second > nodes[i - 1].data.c.second)
swap (nodes[i], nodes[i - 1]);
}
Почему так происходит?
Похоже, что вы используете n1, n2, которые только что удалили через pop_back()
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости