二叉树递归插入方法不起作用

时间:2016-04-21 05:02:18

标签: c++

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,则创建一个新节点并将其设置为键值。否则,递归地向左或向右移动,直到节点到达空点并在那里插入新节点。

1 个答案:

答案 0 :(得分:2)

代码“不起作用”并不正确。当然,它的工作方式与编写时一样。问题是你写了一些不同于你需要的东西。

当您将参数传递给insertRec()时,例程会获得指向Node对象的指针的副本。所以当你在

中分配一个值时
    current = new Node(key);

您在本地变量current中覆盖本地副本。调用函数(及其数据)不知道它。

如果您希望调用者接收新值,请声明一个函数将 a reference 转换为变量:

void insertRec(int key, Node *&current)