C++ 二叉搜索树插入函数c++;
我有以下问题。2年前我在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
#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);
}
};