void insert(int key)
{
insertRec(key, root);
}
void insertRec(int key, Node *current)
{
if(current==NULL)
current = new Node(key);
else if(key <= current->value)
insertRec(key, current->leftChild);
else
insertRec(key, current->rightChild);
}
为什么这不起作用?
在insert函数中,树的键值和根被传递给insertRec。如果节点为null,则创建一个新节点并将其设置为键值。否则,递归地向左或向右移动,直到节点到达空点并在那里插入新节点。
答案 0 :(得分:2)
代码“不起作用”并不正确。当然,它的工作方式与编写时一样。问题是你写了一些不同于你需要的东西。
当您将参数传递给insertRec()
时,例程会获得指向Node
对象的指针的副本。所以当你在
current = new Node(key);
您在本地变量current
中覆盖本地副本。调用函数(及其数据)不知道它。
如果您希望调用者接收新值,请声明一个函数将 a reference 转换为变量:
void insertRec(int key, Node *¤t)