【问题标题】:Binary Search Tree reading in Strings? C++在字符串中读取二叉搜索树? C++
【发布时间】: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


【解决方案1】:

您的 Insert 方法有 2 个参数(要插入的根和要插入的数据);在main 中,您只用 1(数据)调用它。

【讨论】:

  • 我会在 main 的方法调用中添加什么? RBTNode* 根还是根?我已经尝试了这两种方法并收到错误消息“error C2664: 'void RBT<:string>::Insert (RBT<:string>::RBTNode*,T)' : cannot convert argument 1 from 'RBT <:string>' 到 'RBT<:string>::RBTNode *'
  • RBTNode 在您的班级内部,因此听起来您需要一个额外版本的Insert 可以从班级外部调用,然后可以反过来调用您当前的@987654325 @ 使用适当的RBTNode
  • 现在我收到“错误 C224:'RBT ::Insert':无法将函数定义与现有声明匹配”有什么想法吗?我正在尝试研究这个问题,看看它给了我什么
  • 鉴于您没有提供新的代码来评论:没有新的想法。
  • 我更新了代码。我更改了 schwer 指出的问题,然后使用 Insert 函数和 public: RBT 类中的区域进行了更改。
猜你喜欢
  • 2017-04-17
  • 2017-12-18
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多