Код является частью более крупного решения. Когда у меня есть только один элемент в prioriQueue, lastLeft и lastRight имеют значение nullptr. Любые идеи о том, как изменить этот алгоритм, чтобы работать по-разному только с одним элементом или с некоторыми подсказками, как написать его лучше? Проблема соответствует комментарию «ЗДЕСЬ ПРОБЛЕМА».Huffman Coding Создание дерева C++
std::shared_ptr<Leaf> HUFFMAN::TreeGenerating()
{
std::shared_ptr<Leaf> lastLeft = nullptr; // addr of last left child
std::shared_ptr<Leaf> lastRight = nullptr; // addr of last right child
while (!prioriQueue.empty())
{
std::shared_ptr<Leaf> rightChild = std::make_shared<Leaf>();
std::shared_ptr<Leaf> leftChild = std::make_shared<Leaf>();
std::shared_ptr<Leaf> nRoot = std::make_shared<Leaf>();
if (prioriQueue.size() == 1) // getting last element from prioriQueue, this if end algorithm
{
*nRoot = getElement();
nRoot->setLeftChild(lastLeft);
nRoot->setRightChild(lastRight);
nRoot->setFreq(lastLeft->getFreq() + lastRight->getFreq()); // HERE IS A PROBLEM !!
nRoot->setValue(0);
return nRoot;
}
else
{
*leftChild = getElement();
*rightChild = getElement();
nRoot->setLeftChild(leftChild);
nRoot->setRightChild(rightChild);
nRoot->setFreq(leftChild->getFreq() + rightChild->getFreq());
nRoot->setValue(0);
lastLeft = leftChild;
lastRight = rightChild;
InsertIntoQueue(*nRoot);
}
}
}
Off Topic: Похоже, вы злоупотребляете 'std :: shared_ptr'. Рекомендовать читать aa [Какой тип указателя я использую, когда?] (Http://stackoverflow.com/questions/8706192/which-kind-of-pointer-do-i-use-when) – user4581301
Я не могу использовать Unique_ptr becouse of operation u не вижу в моем посте. – ArekJastrzebski