Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二叉搜索树插入函数c++;_C++_Binary Search Tree - Fatal编程技术网

C++ 二叉搜索树插入函数c++;

C++ 二叉搜索树插入函数c++;,c++,binary-search-tree,C++,Binary Search Tree,我有以下问题。2年前我在C++编程,现在决定练习这门语言。我不知道发生了什么,因为编译器说,当我想在插入后访问根->数据时,这是一个访问权限。也许我完全忘记了内存分配等编程概念,但请帮帮我,我看不出这里有错误!提前谢谢 #define BLACK 0 #define RED 1 using namespace std; struct Node { Node* left, *right; int data; bool color; Node(int ke

我有以下问题。2年前我在C++编程,现在决定练习这门语言。我不知道发生了什么,因为编译器说,当我想在插入后访问根->数据时,这是一个访问权限。也许我完全忘记了内存分配等编程概念,但请帮帮我,我看不出这里有错误!提前谢谢

#define BLACK 0

 #define RED 1

using namespace std;

struct Node {

    Node* left, *right;
    int data;
    bool color;

    Node(int key) {
        data = key;
        left = right = NULL;
        color = RED;
    }
};

struct RBTree {

    Node* root;

    RBTree() { root = NULL; }

    void insertBST(Node* node, int key) {

        if (node == NULL) {

            node = new Node(key);
        }

        else {

            if (key < node->data) {

                insertBST(node->left, key);
            }

            else {

                insertBST(node->right, key);
            }
        }
    }

    void insert(int key) {

        insertBST(root, key);
    }
};

int main()
{

    RBTree tree;
    tree.insert(10);

    cout << tree.root->data;
    _getch();
    return 0;
}
#定义黑色0
#定义红色1
使用名称空间std;
结构节点{
节点*左,*右;
int数据;
颜色;
节点(int键){
数据=键;
左=右=空;
颜色=红色;
}
};
结构RBTree{
节点*根;
RBTree(){root=NULL;}
void insertBST(节点*节点,int键){
if(node==NULL){
节点=新节点(键);
}
否则{
if(键<节点->数据){
insertBST(节点->左键);
}
否则{
插入BST(节点->右侧,键);
}
}
}
无效插入(整数键){
insertBST(根,键);
}
};
int main()
{
RBT树;
树。插入(10);
cout数据;
_getch();
返回0;
}
在上面的代码段中,当root==NULL时,您正在创建一个新节点。但您没有将新创建的节点分配给根节点。需要通过引用传递,如下所示

  T obj;
  if ( !ptr ) 
    ptr = &obj;
试试这个:

struct RBTree {

    Node* root;

    RBTree() { root = NULL; }

    void insertBST(Node** node, int key) {

        if (*node == NULL) {

            *node = new Node(key);
        }

        else {

            if (key < (*node)->data) {

                insertBST(&(*node)->left, key);
            }

            else {

                insertBST(&(*node)->right, key);
            }
        }
    }

    void insert(int key) {

        insertBST(&root, key);
    }
};
struct-RBTree{
节点*根;
RBTree(){root=NULL;}
void insertBST(节点**节点,int键){
如果(*节点==NULL){
*节点=新节点(键);
}
否则{
if(键<(*节点)->数据){
insertBST(&(*节点)->左键);
}
否则{
insertBST(&(*节点)->右键);
}
}
}
无效插入(整数键){
insertBST(&根,键);
}
};

。。。没有标题包括吗?它是如何编译的?您从未将其分配给
根目录
。因此它总是
nullptr
。这个<代码>插入式BST(节点*.Noint,int key)< />代码>虽然丑陋会解决这个问题。分配给一个参数对其值作为变量的变量没有影响。您需要通过引用而不是值。考虑通过引用。(C++)
struct RBTree {

    Node* root;

    RBTree() { root = NULL; }

    void insertBST(Node** node, int key) {

        if (*node == NULL) {

            *node = new Node(key);
        }

        else {

            if (key < (*node)->data) {

                insertBST(&(*node)->left, key);
            }

            else {

                insertBST(&(*node)->right, key);
            }
        }
    }

    void insert(int key) {

        insertBST(&root, key);
    }
};