Попробуйте выполнить сортировку BST с использованием шаблона в C ++, но не работали при использовании случайной строки для проверки - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь создать двоичное дерево поиска, а затем выполнить обход, чтобы отсортировать по шаблону в C ++, но что-то не так при тестировании со случайным массивом строк.

Все работает правильно, когда я тестирую со случайным целочисленный массив, но, к сожалению, он показывает сообщение об ошибке No matching function for call to 'insert при использовании строки вместо целого числа.

#include <iostream>
#include <cstring>
#include <ctime>
using namespace std;

struct Node
{
    int key;
    struct Node *left, *right;
};

struct Node *newNode(int item)
{
    struct Node *temp = new Node;
    temp->key = item;
    temp->left = temp->right = NULL;
    return temp;
}

template <typename T> void storeSorted(Node *root, T *arr, int &i)
{
    if (root != NULL)
    {
        storeSorted(root->left, arr, i);
        arr[i++] = root->key;
        storeSorted(root->right, arr, i);
    }
}

Node* insert(Node* node, int key)
{
    if (node == NULL) return newNode(key);
    if (key < node->key)
        node->left  = insert(node->left, key);
    else if (key > node->key)
        node->right = insert(node->right, key);
    return node;
}

template <typename T> void treeSort(T *arr, int n)
{
    struct Node *root = NULL;
    root = insert(root, arr[0]);
    for (int i=1; i<n; i++)
        insert(root, arr[i]);
    int i = 0;
    storeSorted(root, arr, i);
}

string *stringData(int length) {
  srand(time(NULL));
  string *data = new string[length];
  const char *alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  for (int j = 0; j < length; j++) {
    for (int k = 0; k < 6; k++)
      data[j] += alphabet[rand() % strlen(alphabet)];
  }
  return data;
}

int main()
{
    int n = 100;
    string *arr = stringData(n);
    treeSort(arr, n);
    for (int i=0; i<n; i++)
       cout << arr[i] << " ";
    system("PAUSE");
    return 0;
}

1 Ответ

1 голос
/ 11 января 2020

Поскольку, когда вы пишете insert(root, arr[i]);, где arr[i] - строка, вы ожидаете, что arr[i] будет целым числом, поскольку вы пометили Node* insert(Node* node, int key) свой ключ как целое число.

...