У меня есть двоичное дерево поиска. До сих пор я был в состоянии сортировать дерево, используя обход по порядку. Мое дерево - это дерево строк, считываемых из файла, и я хочу подсчитать все уникальные значения в дереве (мне нужно использовать дубликаты для другой части кода, поэтому я не могу создать новое дерево без дубликаты и считайте это). Мне нужно пройти по дереву, чтобы посчитать эти уникальные значения.
Я думал, что было бы легко посчитать уникальные значения, если все отсортировано, я не уверен, почему у меня проблемы.
Этот код работает:
int uniqueCount(node* root, string c){
int count = 0;
if(root == NULL)
return 0;
else
if (root->word == c)
count++;
return 1 + uniqueCount(root->left, c) + uniqueCount(root->right, c);
}
Но он подсчитывает все узлы, включая дубликаты, которые мне не нужны.
Итак, я написал это:
int uniqueCount(node* root, string c){
int counter = 0;
string found, temp = " ";
if (root == NULL){
counter = 0;
}
else{
if (c == root->word){
temp = c;
}
if(found != temp){
counter++;
found = temp;
}
}
return 1 + uniqueCount(root->left, c) + uniqueCount(root->right, c);
}
Но теперь мой код ничего не печатает.
Вот мой основной код:
int main()
{
node *T;
ifstream fin;
string c;
int counter;
fin.open("C:\\Users\\owner\\Documents\\mytest.txt");
if(fin.fail())
{
cout << "Could not find your file. Shutting down.";
exit(1);
}
else{
T = NULL;
while(!fin.eof()){
if (c != " ")
bInsert (c, &T);
counter = uniqueCount(T, c);
fin >> c;
}
}
cout << "Number of distint words are: " << counter << endl;
cout << "In-order\n";
inOrder(T); cout << endl;
Я бы ценю любую помощь.
РЕДАКТИРОВАТЬ: До сих пор этот семестр, структуры данных, которые мы изучили, были стеки, очереди, списки, а теперь и двоичные деревья. Так что для этого проекта мне будет разрешено использовать только эти структуры данных. Мне не разрешили бы использовать ha sh таблицы, или карты, или наборы и т. Д. c.