迭代地将新节点添加到二叉树中,root被覆盖

时间:2013-07-05 10:21:13

标签: c++ binary-tree

我找到了迭代添加新节点所需的代码,但在我的情况下它不起作用。

 // 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;
    // ...

这是如何正确完成的?

2 个答案:

答案 0 :(得分:0)

也许重点是,在遍历树中进行遍历/插入之前,不要存储根节点。因此,在调用函数之后,root是一个任意节点。

也许你应该在第一次函数调用之前存储root,以便始终让入口点重新开始。

答案 1 :(得分:0)

因为root是类级别范围变量。制作root的本地副本,让我们说root_local。

root_local = root。

然后开始在函数中使用它。

当你执行root = root-&gt; bal时。 root在类级别更改。