C++ 迭代地向二叉树添加新节点,根被覆盖

C++ 迭代地向二叉树添加新节点,根被覆盖,c++,binary-tree,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

我找到了迭代添加新节点所需的代码,尽管在我的例子中它不起作用

 // 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,以便始终具有重新启动的入口点。

因为root是类级别的范围变量。制作root的本地副本,比如root\u local

root\u local=根

然后开始在函数中使用它


执行root=root->bal时。根目录在类级别更改

执行节点*root\u local=根已工作。谢谢尽管在创建第一个节点时,我必须在分配之后执行root=root\u local。
struct node {
    int data;
    node *bal;
    node *jobb;
};

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