我编写了以下函数来练习二叉搜索树插入:
...WHERE (@LocationId = 1 AND 1=1)
OR (@LocationId <> 1 AND LocationId = @LocationId)
它有效,但我不明白为什么要传递对root的引用。有人知道为什么吗?
答案 0 :(得分:0)
您希望该函数能够更改存储在您要插入的节点的父节点中的指针,以使其指向新节点而不是nullptr
。如果不使用pass-by-reference,则所有函数都可以修改指针的本地副本,并且实际树中的指针不会被更改。
例如,假设您正在查看节点,并且希望将新节点作为此节点的正确子节点插入。
someNode[key: 123, left: nullptr, right: nullptr]
将使用right
指针作为参数调用该函数。您希望该函数能够更改节点,使其如下所示:
someNode[key: 123, left: nullptr, right: newNode]
如果没有按引用传递,则该函数不能更改节点的right
指针,因为它只被赋予了副本。使用该引用允许该函数实际修改存储在用作参数的节点中的指针。