我正在创建一个二叉搜索树。我遇到插入功能的问题。正如问题标题中所述,我的错误是指新的初始化表达式列表,将其视为复合表达式。
更具体地说,我的插入函数中的这行代码。
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;
答案 0 :(得分:1)
只需编写一个合适的构造函数:
struct treeNode
{
treeNode* left;
treeNode* right;
T data;
treeNode(T const& data, treeNode* left, treeNode* right) :
data(data), left(left), right(right) {}
};