繁体   English   中英

具有参数引用的二进制搜索树插入

[英]binary search tree insertion with argument reference

我编写了以下函数来练习二进制搜索树插入:

void RecursiveInsert(struct Node* &root, int key) {

    if (root == nullptr) {
        root = new Node(key);
        return;
    } else if (root->key > key) {
        RecursiveInsert(root->left, key);
    } else {
        RecursiveInsert(root->right, key);
    }
}

它有效,但是我不明白为什么要传递对root的引用。 有人知道为什么吗?

您希望函数能够更改存储在要插入的节点的父节点中的指针,使其指向新节点而不是nullptr 如果不使用按引用传递,则所有功能可以做的就是修改指针的本地副本,并且实际树中的指针不会更改。

例如,假设您正在查看一个节点,并且希望将新节点插入为该节点的正确子节点。

someNode[key: 123, left: nullptr, right: nullptr]

该函数将使用right指针作为参数来调用。 您希望函数能够更改节点,因此它看起来像这样:

someNode[key: 123, left: nullptr, right: newNode]

如果不传递引用,则该函数将无法更改节点的right指针,因为它仅获得了一个副本。 使用引用允许函数实际修改存储在用作参数的节点中的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM