【发布时间】:2017-04-13 12:38:30
【问题描述】:
我识别出这样的二叉树:
class Btree
{
public:
BtreeNode <T>* root;
...
}
然后我在二叉树类中写了一个插入函数,如下所示:
void Btree<T>::InsertNode2(T data, BtreeNode <T>* &root)
{
if (root==NULL)
{
root = new BtreeNode <T> (data);
//cout << root->data << endl;
return ;
}
if (data <= root->data)
InsertNode2(data, root->leftchild);
else
InsertNode2(data, root->rightchild);
}
当我调用这个函数时:
Btree<int> *tree=new Btree<int>();
tree->InsertNode2(1, tree->root);
没关系。一切正常。
但是如果我写另一个函数来获取root:
BtreeNode <T>* GetRoot(){ return this->root; }
当我调用 InsertNode2 时:
Btree<int> *tree=new Btree<int>();
tree->InsertNode2(1, tree->GetRoot());
有一个错误:非常量引用的初始值必须是左值。 这两种方法有什么区别?如何修改它?我希望 root 是私有的。
【问题讨论】:
-
区别在于
tree->root是成员变量,而tree->GetRoot()是该成员变量的副本。
标签: c++ pointers binary-tree