在二叉搜索树中插入新元素
inserting a new element in a binary search tree
我正在尝试在二叉搜索树中插入一个新元素,我编写了以下函数,但它似乎不起作用,我似乎无法理解为什么。
法典:
node* new_node(int data)
{
node* ptr=new node();
ptr->data=data;
ptr->left=NULL;
ptr->right=NULL;
return ptr;
}
void insert(node* root,int d)
{
if(root==NULL)
root=new_node(d);
else if(d<root->data)
insert(root->left,d);
else
insert(root->right,d);
}
将对象传递给函数时,函数将接收值的副本作为参数。修改值的副本对原始对象没有影响(至少在指针等基本类型的情况下(。这不适用于具有内部间接寻址的"引用"类(。
为了修改函数外部的对象,您需要使用间接寻址。自从传递指针以来,您已经有了一个间接层。通过指针参数进行间接处理,可以修改函数外部的节点。但是分配指针并不是尝试修改指向的节点。这是修改指针的尝试。但是指针是一个副本,因此赋值对函数的外部没有影响。
因此,您需要第二层间接寻址:传递对指针的引用,以便分配指针会修改引用的指针而不是副本。另一种方法是使用返回值,如 Abdullah 所示。请注意,这会稍微改变函数的调用方式。
试试这个-
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;
}
相关文章:
- 静态堆栈函数不会 1) 输入第一个元素 2)添加新元素时识别旧元素
- 在二叉搜索树中插入新元素
- 如何输入数组的元素,每次获得新元素时,我们将其放在数组的中间?
- 将新元素添加到列表中,并返回对该元素的引用?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 向 std::list 添加新元素的复杂性
- 是否可以使用OpenMP并行化一个列表,该列表可以在每次迭代中添加新元素
- 在指向对象的指针的动态数组上插入新元素
- c++ 向量push_back移动新元素
- 新元素将在std :: set中插入哪里
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- 在C++中,如何在没有新元素且不单独声明单个元素的情况下创建"std::initializer_list<base *>"?
- 在unordered_map/unordered_set中插入/放置新元素时的提示
- 将新元素添加到动态数组C
- 插入新元素时结束迭代器会获得更新
- 将新元素推送到函数指针映射中 "inline" ?
- 自定义容器在保留空间时不必要地创建新元素实例
- 删除前面元素并将新元素添加到最小堆 (std::p riority_queue)
- 2D-Array 会在存储新元素时删除元素本身
- 创建新元素崩溃后,tinyxml2 xmldocument parse