我找到了迭代添加新节点所需的代码,但在我的情况下它不起作用。
// bal=left jobb=right
void bkf::beszur(int k) {
if(root != NULL)
while (true) {
if (k < root->data) {
if (root->bal == NULL) {
root->bal = new node;
root->bal->data = k;
root->bal->bal = NULL;
root->bal->jobb = NULL;
break;
}
else
root = root->bal; // overwrites root
}
else
if (root->jobb == NULL) {
root->jobb = new node;
root->jobb->data = k;
root->jobb->bal = NULL;
root->jobb->jobb = NULL;
break;
} else
root = root->jobb; // overwrites root
}
else {
root = new node;
root->data = k;
root->bal = NULL;
root->jobb = NULL;
}
}
在“root = root-&gt; bal”中,根被覆盖,所以它也需要数据以及root-&gt; bal的左右节点。我也尝试创建一个“node * p”,并为它分配root,但这样就为p本身分配内存,而不是p指向的位置。 这是宣言:
struct node {
int data;
node *bal;
node *jobb;
};
class bkf {
node *root;
// ...
这是如何正确完成的?
答案 0 :(得分:0)
也许重点是,在遍历树中进行遍历/插入之前,不要存储根节点。因此,在调用函数之后,root是一个任意节点。
也许你应该在第一次函数调用之前存储root,以便始终让入口点重新开始。
答案 1 :(得分:0)
因为root是类级别范围变量。制作root的本地副本,让我们说root_local。
root_local = root。
然后开始在函数中使用它。
当你执行root = root-&gt; bal时。 root在类级别更改。