我正在创建一个自定义二进制树,并且偶然发现了以下代码,以便从此site正确插入树中。
void treeInsert(TreeNode *&root, string newItem) {
if ( root == NULL ) {
root = new TreeNode( newItem );
return;
}
else if ( newItem < root->item ) {
treeInsert( root->left, newItem );
}
else {
treeInsert( root->right, newItem );
}
}
为什么需要传递
TreeNode *&root
而不是TreeNode *root
? 最佳答案
如果传递指针而不是引用指针,则对该指针本身所做的修改将是treeInsert
函数的局部内容。这样可以防止您插入根,这是唯一必须修改指针本身(源代码中的第三行)的情况。
例如,如果您这样做
TreeNode *root = NULL;
treeInsert(root, "hello");
并且
treeInsert
接受TreeNode*
,调用root
之后的treeInsert
值将保持为NULL
,因为源代码的第三行将修改root
指针的本地副本。关于c++ - 为什么在二叉树中传递 “T *&root”进行插入操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22834498/