C++ 在二叉搜索树中插入新元素
我试图在二元搜索树中插入一个新元素,我编写了以下函数,但它似乎不起作用,我似乎无法理解为什么 代码:C++ 在二叉搜索树中插入新元素,c++,data-structures,binary-search-tree,C++,Data Structures,Binary Search Tree,我试图在二元搜索树中插入一个新元素,我编写了以下函数,但它似乎不起作用,我似乎无法理解为什么 代码: node*新节点(int数据) { node*ptr=新节点(); ptr->data=数据; ptr->left=NULL; ptr->right=NULL; 返回ptr; } 空插入(节点*根,int d) { if(root==NULL) 根=新的_节点(d); 否则如果(ddata) 插入(根->左,d); 其他的 插入(根->右,d); } 将对象传递给函数时,函数会收到一个值的副本作
node*新节点(int数据)
{
node*ptr=新节点();
ptr->data=数据;
ptr->left=NULL;
ptr->right=NULL;
返回ptr;
}
空插入(节点*根,int d)
{
if(root==NULL)
根=新的_节点(d);
否则如果(ddata)
插入(根->左,d);
其他的
插入(根->右,d);
}
将对象传递给函数时,函数会收到一个值的副本作为参数。修改值的副本对原始对象没有影响(至少在指针等基本类型的情况下是如此。这不适用于具有内部间接寻址的“引用”类)
为了修改函数之外的对象,需要使用间接寻址。自从传递指针以来,您已经有了一个间接层。通过指针参数间接指向,可以修改函数外部的节点。但分配指针并不是试图修改指向的节点。它试图修改指针。但是指针是一个副本,因此赋值对函数外部没有影响
因此,您需要第二层间接寻址:向指针传递一个引用,这样分配指针将修改引用的指针而不是副本。另一种方法是使用返回值,如所示。请注意,这会稍微改变调用函数的方式。试试这个-
node* insert(node* root,int d)
{
if(root==NULL)
root = new_node(d);
else if(d<root->data)
root->left = insert(root->left,d);
else
root->right = insert(root->right,d);
return root;
}
节点*插入(节点*根,int d)
{
if(root==NULL)
根=新的_节点(d);
否则如果(ddata)
根->左=插入(根->左,d);
其他的
根->右=插入(根->右,d);
返回根;
}
root=新节点(d)代码>修改本地根参数。它不会修改调用者传递给insert
例程的参数。这不适用于添加子项。应该是root->left=insert(root->left,d)代码>和根->右=插入(根->右,d)代码>谢谢你发现我的错误。更正了。:)
node* insert(node* root,int d)
{
if(root==NULL)
root = new_node(d);
else if(d<root->data)
root->left = insert(root->left,d);
else
root->right = insert(root->right,d);
return root;
}