需要帮助构建基数树c++
Need help constructing radix tree c++
我正在使用huffman编码在c++中构建一个基数树。我得到了一个算法来遵循,我所写的似乎应该有效,但它一直在崩溃。
我遵循这个算法:
- 使用一个计数器,这样你就可以知道构建何时完成(N个字符需要该算法的N-1个循环)
- 通过指针数组,找到"根"节点的两个最小频率
- 创建一个新节点,存储(b)中找到的频率的总和,存储(b)中发现的节点作为其子节点,用该新节点的地址替换数组中的一个指针,并使另一个为0
- 使用BSTDump测试您的结果。请注意,根据分配左、右和"新根"的方式,结果会有所不同
然后我试图用这个功能测试我的结果:
void BSTDump(Node * r)
{
static bool first = true;
if (first)
{
cout << "Parent Left Right" << endl
<< "---------------------" << endl;
first = false;
}
if (r != 0)
{
BSTDump(r->left);
BSTDump(r->right);
cout << setw(4) << r->theChar << r->freq;
if (r->left != 0)
cout << setw(8) << r->left->freq;
else
cout << setw(8) << '*';
if (r->right != 0)
cout << setw(8) << r->right->freq << endl;
else
cout << setw(8) << '*' << endl;
}
}
以下是节点构造:
struct Node
{
double freq;
char theChar;
Node * left;
Node * right;
};
以下是我在构建函数中写的内容,它不能正确工作:
void ConstructTree(Node * &r)
{
Node * N[ASIZE];
for (int i = 0; i < ASIZE; i++)
{
N[i] = new Node;
assert(N[i] != 0);
N[i]->left = N[i]->right = 0;
cout << "Enter the char and its frequency: ";
cin >> N[i]->theChar >> N[i]->freq;
}
int Num = ASIZE;
while (Num > 1)
{
// find two smallest.
Node * p1;
Node * p2;
//p1->theChar = p2->theChar = N[0]->theChar;
//p1->freq = p2->freq = N[0]->freq;
//p1->left = p1->right = p2->right = p2->left = 0;
p1 = p2 = N[0];
for(int i = 0; i < ASIZE; i++)
{
if(N[i]->freq > p1->freq){
//p2->theChar = p1->theChar;
//p2->freq = p1->freq;
//p1->theChar = N[i]->theChar;
//p1->freq = N[i]->freq;
p2 = p1;
p1 = N[i];
}
}
// create a new node
Node * sum = new Node;
sum->freq = p1->freq + p2->freq;
sum->left = p2;
sum->right = p1;
// update array N contents
N[Num] = sum;
delete sum;
Num--;
}
// make certain that r knows where the root is
r = N[0];
}
有什么想法吗?
哼。。。
// create a new node
Node * sum;
这不是创建节点。这是在声明一个指向Node
的未初始化指针。
此处缺少= new Node();
部分。
Matthieu M.已经发现了一个错误:这里是另一个:
// find two smallest.
Node * p1 = 0;
Node * p2 = 0;
p1->left = p1->right = p2->right = p2->left = 0;
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 构建一个由C和C++文件组成的库
- llvm构建器向基本块添加终止符
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 如何跨平台将二进制资源构建到程序中?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 如何解决 Ninja c++ 构建和执行问题
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 用CMake构建C++协议
- Mingw-64 在构建和安装后不会编译 openCV 代码