Я работаю над заданием на сжатие/распаковку. Я пытаюсь написать метод C++ для построения дерева, используя следующий обход в предварительном порядке из заголовка моего сжатого файла: 001c1b01a01e1d 0 представляет собой внутренний узел, а 1 представляет собой лист. Каждый раз, когда я создаю узел, я устанавливаю код этого узла либо в 0, либо в 1, потому что я буду использовать другой метод для декодирования дерева, и он должен знать, как перемещаться по разным сторонам, используя эти коды. Всякий раз, когда я достигаю 1 в строке обхода предварительного заказа, я устанавливаю поле «символ» узла на следующий символ в строке предварительного заказа. Я не могу заставить его работать. Кто-нибудь может помочь? Вот мой код («bitsToRead» просто представляет длину строки предварительного заказа, поэтому метод знает, когда остановиться) Спасибо!
void HCTree::buildFromHeader(ifstream& in, HCNode* n, int codeToUse) {
if( bitsToRead > 0) {
char c = in.get();
bitsToRead--;
if(c == '0') {
n = new HCNode(0, 0, 0, 0, 0, codeToUse);
if(rootSet == 0) {
root = n;
rootSet = true;
}
HCNode* left;
n->c0 = left;
HCNode* right;
n->c1 = right;
buildFromHeader(in, left, 0);
buildFromHeader(in, right, 1);
}
else {
byte symbol = in.get();
n = new HCNode(0, symbol, 0, 0, 0, codeToUse);
bitsToRead--;
n->c0 = n->c1 = NULL;
}
}
}