我正在创建一个自定义二进制树,并且偶然发现了以下代码,以便从此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/

10-11 22:42
查看更多