在二叉搜索树中插入新元素

inserting a new element in a binary search tree

本文关键字:元素 新元素 插入 搜索树      更新时间:2023-10-16

我正在尝试在二叉搜索树中插入一个新元素,我编写了以下函数,但它似乎不起作用,我似乎无法理解为什么。

法典:

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;
}