Я пытаюсь написать программу для обратного поиска телефонных номеров (пользователь дает номер, а программа печатает соответствующее лицо + другие номера, которые ему принадлежат). Теперь я сохранил данные людей в связанном списке и пытаюсь построить дерево.
Каждый элемент дерева будет сохранять указатель на данные человека, индекс (который соответствует части телефонного номера, например, если номер начинается с «0», индекс первого дочернего узла корня равен «0») и вектор указателей на его детей.
Пока я могу сохранить первое заданное число в дереве, но, похоже, возникают проблемы при попытке сохранить более одного числа в дереве. Может быть, проблема с указателями на дочерние узлы, но я не уверен, что там. Вот упомянутая часть кода:
class Tree {
public:
Datensatz *data; //data stored in node
char number; //index of node - part of a telephone number
Tree* wurzel; //root
vector<Tree*> nextEls; //vector of children of nodeTree(int zahl);/*
div. functions
*/
void add(vector<char>); //called to add telephone number to tree
};void Tree::hinzufRek(vector<char> telNum)
{
Tree *aktEl = new Tree(); //latest node
aktEl=this->wurzel; //starts with root
int check = 0;
for (int i=0; i<telNum(); i++) {
char h = telNum(i);
if(aktEl->nextEls.size()!=0){
int j;
for (j = 0; j<aktEl->nextEls.size(); j++) {
if (h == aktEl->nextEls[j]->number) { //if latest number already exists in node children...
aktEl = aktEl->nextEls[j];
check = 1;
break;
}
}
if (check == 0) {
aktEl->nextEls.push_back(new Tree(h));
aktEl = aktEl->nextEls[j];
}
}
else { //if there are no current children to latest node
aktEl->nextEls.push_back(new Tree(h));
aktEl = aktEl->nextEls[0];
}
}
}
}
Кроме того, я подумал, что было бы неплохо удалить объект Tree * aktEl в конце функции, но это приводит только к действительно странным результатам. Я не уверен, что приведенный выше код очень ясен или его легко понять, но я надеюсь, что один из вас сможет мне помочь …
Может быть, я просто что-то наблюдаю …
Заранее спасибо!
roboneko42
Задача ещё не решена.
Других решений пока нет …