我正在处理压缩/解压缩任务。我正在尝试编写一个 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;
}
}
}