调用函数

时间:2017-04-13 12:38:30

标签: c++ pointers binary-tree

我识别出这样的二叉树:

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());

有一个错误:对非const的引用的初始值必须是左值。 这两种方法的区别是什么?如何修改?我希望root是私有的。

2 个答案:

答案 0 :(得分:1)

按值而不是通过引用获取BtreeNode指针。例如

void Btree<T>::InsertNode2(T data, BtreeNode <T>* root)

这可以解决您的问题。

答案 1 :(得分:0)

您的InsertNode2函数是树的私有细节。您的树应具有公共插入界面,如下所示:

class Btree
{
    BtreeNode <T>* root;

public:
    void Insert(const T& data) { InsertNode2(data, root); }

    // ...
};

树根当然也应该是树的私人细节。

您的GetRoot函数返回根指针的副本,当然尝试修改副本是没有意义的。你可能不应该拥有 GetRoot函数,因为见上文。