0

假设您有以下课程

template <class T>
class BinarySearchTree {
private:
    Node<T> root;
public:
    Node<T>* deleteNode(T value) {
        Node<T>* rootPointer = &this->root;
        return deleteNode(rootPointer, value);
    }
    /*
    Delete specific value in the root provided
    */
    Node<T>* deleteNode(Node<T> *& root, T value) {
       //here be magic
    }
}

在没有指向Node<T>: deleteNode方法的指针的重载中,您看到我得到了指向的指针,this->root然后将其传递给实际的主力,即另deleteNode一种方法。

有没有办法做到这一点......更优雅一点?我的思考过程是我可以做到:

return deleteNode(&this->root, value);

但编译器会给我

'Node<T> *Bst<T>::deleteNode(Node<T> *&,T)': cannot convert argument 1 from 'Node<T> *' to 'Node<T> *&'

我的主要问题是,我的思维过程出了什么问题?我这样做是否正确/C++ 方式?

4

1 回答 1

0

在@VTT 的帮助下

为了确保我真正学到了一些东西:

我所做的是通过引用传递一个指针,&表示我们正在通过引用传递,而“*”表示该变量是一个指针。

如果我想要 onlineliner,我应该使用(Node<T>* root)而不是(Node<T>*& root). 通过引用传递指针有其用途,但事实并非如此。

于 2019-10-05T18:12:23.827 回答