Справочная информация: я пишу программу, которая берет список данных и анализирует их в двоичном дереве поиска.Ключ для этих данных имеет тип «строка».Я работаю над написанием логической функции, которая возвращает «true», если ключ данных, которые должны быть добавлены, предшествует ключу данных в ссылочном узле, «false», если новый ключ следует за старым и рекурсивно выполняется черезфункция, увеличивающаяся на одну позицию, если рассматриваемые символы равны, является значением ASCII.
В настоящее время кажется, что мои сравнения верны и, по-видимому, корректно повторяются, но для всех случаев возвращает false.
mBST.cpp
class mBST {
private:
struct mNode {
movie M;
string k;
mNode* left;
mNode* right;
};
mNode *root;
mNode *insert(movie m, mNode *t) {
bool rec;
if (t == NULL) {
t = new mNode();
t->M = m;
t->k = m.getTitle();
t->left = NULL;
t->right = NULL;
} else {
if(abcOrder(m, t, 0)){
t->left = insert(m, t->left);
}
else {
t->right = insert(m, t->right);
}
}
return t;
};
mNode *remove(movie m, mNode *t);
mNode *search(string k, mNode *t);
mNode *min(mNode *t);
mNode *max(mNode *t);
void inorder(mNode *t);
public:
mBST() {
root = NULL;
}
void insert(movie m) {
root = insert(m, root);
};
void remove(movie m);
void search(string k);
void inorder();
//Initial call passes i = 0
bool abcOrder(movie m, mNode *ref, int i) {
int data = NULL;
//Gets key data and converts to lowercase as needed
int newNode = m.getTitle().at(i);
if (newNode < 97)
newNode = newNode + 32;
int refNode = ref->M.getTitle().at(i);
if (refNode < 97)
refNode = refNode + 32;
//Compares key data at position 'i'
if (newNode < refNode) {
return true;
} else if (newNode > refNode) {
return false;
} else {
//If newNode.key == refNode.key, increment position and run again
i++;
abcOrder(m, ref, i);
}
}
};
MoviePeopleBST.cpp
int main()
{
ifstream inFile;
ofstream outFile;
mBST movieBST;
pBST peopleBST;
inFile.open("movies.txt");
//Reads in movies text file and sends to BST
while (!inFile.eof()) {
string junk;
string sTemp;
movie temp;
int iTemp;
getline(inFile, sTemp);
if (sTemp != "") {
temp.setTitle(sTemp);
inFile >> iTemp;
temp.setYear(iTemp);
getline(inFile, junk);
inFile >> iTemp;
temp.setRunTm(iTemp);
getline(inFile, junk);
getline(inFile, sTemp);
temp.setRating(sTemp);
getline(inFile, sTemp);
temp.setAspect(sTemp);
getline(inFile, sTemp);
temp.setColor(sTemp);
movieBST.insert(temp);
//movieVector.push_back(temp);
}
}
inFile.close();
/*inFile.open("people.txt");
//Reads in people text file and sends to BST
while (!inFile.eof()) {
string junk;
string sTemp;
people temp;
int iTemp;
getline(inFile, sTemp);
if (sTemp != "") {
temp.setFirst(sTemp);
getline(inFile, sTemp);
temp.setLast(sTemp);
inFile >> iTemp;
temp.setbYear(iTemp);
getline(inFile, junk);
inFile >> iTemp;
temp.setdYear(iTemp);
getline(inFile, junk);
getline(inFile, sTemp);
temp.setGender(sTemp);
peopleBST.insert(temp);
//peopleVector.push_back(temp);
}
}
inFile.close();*/
return 0;
}
Текстовый файл в качестве данных для вставки:
laak
4
5
guide
payment
exclusive
laab
5
4
impartial
sigh
stage
laaj
9
8
change
cannon
wound
laal
8
7
acid
help
tickle
Заданные ключи: 1. laak 2. laab 3. laaj 4. laal
Мы должнысм. вывод:
Все, что он на самом деле возвращает, является ложным, поскольку 4 является правильным потомком 3, 3справа от 2, а 2 справа от 1.
Примечание. Метод вставки работал правильно до того, как я реализовал эту функцию, хотя и с уникальными первыми символами.