繁体   English   中英

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

[英]Iteratively adding a new node to a binary tree, root getting overwritten

我发现需要的代码来迭代添加新节点,尽管在我的情况下它不起作用。

 // 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-> bal”处,根将被覆盖,因此它也需要数据以及root-> bal的左右节点。 我还尝试创建一个“节点* p”,并为其分配根,但是那样,它会为p本身而不是p所指向的位置分配内存。 这是声明:

struct node {
    int data;
    node *bal;
    node *jobb;
};

class bkf {
    node *root;
    // ...

如何正确完成?

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

也许您应该在第一个函数调用之前存储根,以始终使入口点再次启动。

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

root_local =根。

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

当您执行root = root-> bal时。 在类级别更改root。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM