【发布时间】:2014-12-07 15:24:28
【问题描述】:
我有一个项目要在星期一晚上完成。该项目是实现一个红黑树,它在独立声明中读取为“Independence.txt”,并将这些字符串放入红黑树中。我试图首先将它实现为二叉搜索树,然后添加颜色和旋转,因为我已经完成了该代码。
我面临的问题是,现在我不断收到以下错误:“error C2660”'RBT ::Insert':函数不接受 1 个参数”和“IntelliSense:来自“std:string 的不合适的转换函数” " 到 "RBT::RBTNode *" 存在" 然后是 IntelliSense:函数调用中的参数太少,指向行 root.Insert(myString);
我还需要帮助将文件读入二叉搜索树。我确实认为我的 insert 方法是正确的,问题出在 main 方法上。
感谢您的帮助,因为我被困住了。
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
template<typename T>
class RBT
{
struct RBTNode {
T data;
RBTNode* left;
RBTNode* right;
};
public:
RBT();
~RBT();
void GetNewNode(RBTNode* root, T data);
void Insert(RBTNode* root, T data);
bool Search();
void Display();
};
template <typename T>
void RBT<T>::GetNewNode(RBTNode* root, T data) {
RBTNode* newNode = new RBTNode();
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
template <typename T>
void RBT<T>::Insert(RBTNode* root, T data) {
if (root == NULL) {
root = GetNewNode(data);
}
else if (data <= root->data) {
root->left = Insert(root->left, data);
}
else {
root->right = Insert(root->right, data);
}
return root;
}
template<typename T>
bool RBT<T>::Search() {
if (root == NULL) return false;
else if (root->data == data) return true;
else if (data <= root->data) return Search(root->left, data);
else return Search(root->right, data);
}
template<typename T>
void RBT<T>::Display() {
if (root->left != NULL)
display(root->left);
cout << root->left << endl;
if (root->right != NULL)
Display(root->right);
cout << root->right << endl;
}
int main()
{
RBT<string> root;
string myString;
ifstream infile;
infile.open("Independence.txt");
while (infile)
{
infile >> myString;
root.Insert(myString);
}
cin.ignore();
return 0;
}
【问题讨论】:
-
RBTNode* newNode = new BstNode();
标签: c++ string binary-search-tree red-black-tree