带有指针的树结构
Tree Construction with pointers
我正试图创建一个函数,将键结构插入树中。该函数可以正确设置根,但在使用另一个键再次调用时不会设置分支。这是代码:
tree.h:
class tree{
key *tree_root;
public:
tree();
//Constructor
void treedestroy(key *root);
//Tree destructor helper
~tree();
//Destructor
void insert(key* root, key *newkey, int disc);
};
从树类插入函数:
void tree::insert(key *root, key *newkey, int disc){
if (root == NULL){
root = newkey;
return;
}
if (newkey->cord[disc] <= root->cord[disc])
insert(root->left, newkey, (disc+1)%4);
else if (newkey->cord[disc] > root->cord[disc])
insert(root->right, newkey, (disc+1)%4);
}
我对C++指针有点缺乏经验,想知道如何修复这段代码,使其正确填充树?
我不完全确定您在这里的方法,但为了帮助您站稳脚跟,使用以下函数签名会有所帮助:
void insert(key*& root, key *newkey, int disc);
这通过引用传递根指针,这意味着函数内部所做的更改将"粘贴"到您传递的变量上
当前的函数修改函数的局部变量,而不会传播这些更改。
这篇文章是一篇平衡而快速的参考文章(我不能说它是否是最好的——这只是我发现的第一篇不错的文章(
-
如果在第一次调用时newkey为null,则root将保持为null。请确保方法调用正确。
-
我会放一个else而不是else if。如果它是一个二叉树,它要么等于,要么大于,要么小于。
-
它是否进入Insert_helper?为什么你没有把它包括在内,看起来很重要?我想它至少有那么远了。
root = newKey;
这不会修改实际根。它只是修改函数参数,该参数是调用intsert函数时指定的指针的副本。
正确的版本看起来像这样:
private:
void tree::insert_helper( key **root, key *newkey, int disc ) {
if ( (*root) == NULL ) {
*root = key;
} else if (newkey->cord[disc] <= root->cord[disc]) {
insert_helper( &((*root)->left), newkey, (disc+1)%4 );
} else {
insert_helper( &((*root)->right), newkey, (disc+1)%4);
}
}
public:
void tree::insert( key *newKey, int disc ) {
insert_helper( &tree_root, newkey, disc );
}
此外,您还必须确保"key"构造为左和右设置为NULL。树构造函数应该为tree_root 设置NULL
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- C++:映射结构中的结构指针
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 类的静态结构指针声明在C++
- 在两个.cpp文件之间定义全局类/结构指针
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 如何在地图中使用结构指针
- 结构指针在"新"调用上给出已分配的地址?
- 铸造结构指针指向C 的工会指针
- c++ 结构指针在初始化为 NULL 时无法读取内存
- 函数中的结构指针的地址为0x1
- C 用结构指针初始化结构
- C 结构指针铸成数组Interop C#
- 方法中不允许访问结构指针
- 如何打印出结构指针
- MPI_Op_create:候选功能不可行.自定义结构指针不能解释为空指针
- 尝试将结构指针传递给类时出错
- 初始化结构指针的值
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?