BST错误:新的初始化程序表达式列表被视为复合表达式

时间:2014-10-29 20:42:56

标签: c++ binary-search-tree

我正在创建一个二叉搜索树。我遇到插入功能的问题。正如问题标题中所述,我的错误是指新的初始化表达式列表,将其视为复合表达式。

更具体地说,我的插入函数中的这行代码。

v = new treeNode(n , NULL, NULL);

我的代码:

#ifndef BST_H
#define BST_H
#include <iostream>

template <class T>
class BST {
private:
        struct treeNode
        {
                treeNode* left;
                treeNode* right;
                T data;
        };
        treeNode* root;
        int count;
        void insert(const T & n, treeNode * & v);

public:
        BST();
        ~BST();
        void push(const T & n);
        void printPreOrder() const;
        void preOrder(treeNode* pre) const;
        bool search(const T & s);
        bool empty() const;
        int size() const;

};

template<class T>
BST<T>::BST()
{
    root = NULL;
    count = 0;
}


template<class T>
void BST<T>::push(const T & n)
{   
    insert(n,root);
}

template<class T>
void BST<T>::insert(const T & n, treeNode* & v)
{
    if (v == NULL)
        v = new treeNode(n , NULL, NULL);
    else if ( n < v->data)
        push(n, v->left);   // goes to left node
    else if ( v->data < n)
        push(n, v->right);  // goes to right node
    else 
        ; // duplicate; do nothing.

}

我理解复合表达意味着什么,但是它想要更像这样的东西吗?

    if (v == NULL)
    treeNode* v = new treeNode;
    v->data = n;
    v->left = NULL;
    v->right = NULL;

1 个答案:

答案 0 :(得分:1)

只需编写一个合适的构造函数:

    struct treeNode
    {
            treeNode* left;
            treeNode* right;
            T data;

            treeNode(T const& data, treeNode* left, treeNode* right) :
                    data(data), left(left), right(right) {}
    };