插入C ++模板类的方法

时间:2013-12-04 04:25:13

标签: c++ templates struct

以下是我迄今为止实施的内容。执行后调试以下代码时 “n =新节点(val,NULL,NULL);”在insert方法中并保留insert方法,一旦我离开方法,“val”就不会保存在根节点中,我不明白为什么。

// Creates an empty binary tree
template<class T> binTree<T>::binTree() {
    root = NULL;
}

template<class T> void binTree<T>::insert(T val) {
    insert(val, root);
}

template<class T> void binTree<T>::insert(T val, node* n) {
    if (n == NULL) {
        n = new node(val, NULL, NULL); // <=============Not actually storing the value into the node after this method is done
    } else if (val < n->val) {
        if (n->left == NULL) {
            n->left = new node(val, NULL, NULL);
        } else {
            insert(val, n->left);
        }
    } else if (val > n->val) {
        if (n->right == NULL) {
            n->right = new node(val, NULL, NULL);
        } else {
            insert(val, n->right);
        }
    }
}

这是头文件中的私有结构:

private:
    struct node {
        T val;
        node* left;
        node* right;

        node(T v, node* l, node* r) :
                val(v), left(l), right(r) {
        }
    };

    void destruct(node* n);
    void insert(T val, node* n);
    T find(T val, node* n) const;
    T remove(T val, node* n, node* parent);

    node* root;
};

1 个答案:

答案 0 :(得分:0)

您正在按值接受指针,因此您只修改局部变量n,当函数返回时,更改将丢失。

也许您打算通过引用nnode*& n?这意味着对函数内n的更改将影响您传递给函数的参数。