BST.h
#include "stdafx.h"
#include <iostream>
#include <cstddef>
#include <string>
using namespace std;
#ifndef BST_H_
#define BST_H_
template <class bstdata>
class BST
{
private:
struct Node
{
bstdata data;
Node* left;
Node* right;
Node() : left(NULL), right(NULL){}
Node(bstdata newdata) : left(NULL), right(NULL), data(newdata){}
};
typedef struct Node* Nodeptr;
Nodeptr root;
int size;
/** Private Helper Functions **/
void addValue(Nodeptr root, bstdata value);
void printInOrder(Nodeptr root);
public:
BST();
bool isEmpty();
int getSize();
void add(bstdata value);
bstdata getRoot();
void inOrderPrint();
};
/**Public functions*/
template <class bstdata>
BST<bstdata>::BST() : size(0), root(NULL){};
template <class bstdata>
void BST<bstdata>::add(bstdata value)
{
if (root == NULL)
{
root = new Node(value);
size++;
}
else
addValue(root, value);
}
template <class bstdata>
void BST<bstdata>::addValue(Nodeptr root, bstdata value)
{
if (value == root->data)
return;
if (value < root->data)
{
if (root->left == NULL)
{
root->left = value;
size++;
}
}
else
addValue(root-> left, value);
if (root-> right == NULL)
{
root->left = value;
size++;
}
else
addValue(root-> right, value);
}
template <class bstdata>
bstdata BST<bstdata>::getRoot()
{
if (size == 0)
cout << "getRoot: there is no root in the BST" << endl;
else
return root->data;
}
#endif
BST.cpp
// BSTTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "BST.h"
#include <iostream>
#include <cstddef>
#include <string>
using namespace std;
int main()
{
BST<int> B;
B.add(5);
B.getRoot();
return 0;
}
所以错误,这篇文章的标题,我发生了两次。它在两行中显示为:root-&gt; left = value;位于头文件中的addValue函数中。我不知道为什么我不能将值赋给左边的指针。如果有人能提供帮助那就太棒了。
答案 0 :(得分:2)
行
root->left = value;
和
root->left = value;
不对。您不能将int
类型的对象分配给类型为Node*
的对象。
他们需要
root->left = new Node(value);
和
root->left = new Node(value);
分别
答案 1 :(得分:0)
就像你的错误所说,这两种类型是不兼容的。模板类型为int
(main中的第一行),left
的类型为Node*
。你的意思是说root->data = value
吗?要么您需要创建新的Node
,请将其data
设置为value and then assign the new node to
root-&gt; left`。