Я пытаюсь расшифровать дерево Хаффмана формы:Декодирование дерева Хаффмана
001A1C01E01B1D
Я использую реализацию здесь: Efficient way of storing Huffman tree закодировать дерево в форме выше и декодировать его, а также ,
Это моя реализация этого:
HuffmanNode* HuffmanTree::decodeTree(string tree, int idx) {
cout << idx << endl;
if (tree[idx] == '1') {
idx += 2;
return new HuffmanNode(tree[idx - 1]);
}
else {
if (idx != tree.length() - 1) {
idx++;
HuffmanNode* leftChild = decodeTree(tree, idx);
idx++;
HuffmanNode* rightChild = decodeTree(tree, idx);
return new HuffmanNode(leftChild, rightChild);
}
else
return new HuffmanNode(tree[idx]);
}
}
Я получаю нарушение прав доступа, написание местоположение, когда функция раскручивается (On "вернуть новый HuffmanNode (дерево [IDX - 1]);"), и я надеюсь, что окончательное возвращение будет корнем дерева, но при дальнейшей проверке это, похоже, не так. Может ли кто-нибудь дать мне несколько указателей? (Каламбур не предназначен)
Вы ожидаете, что idx будет использоваться между рекурсивными вызовами? если это так, вам нужно сделать ссылку в списке параметров. Кроме того, вы, вероятно, можете сделать с некоторыми проверками безопасности границ (с соответствующими ошибками); так как это означает, что это может быть вызвано любой строкой, заканчивающейся, например, «1». – Dave