[英]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.