電話番号の逆検索を行うプログラムを作成しようとしています (ユーザーが番号を指定すると、プログラムは対応する人 + それに属する他の番号を出力します)。現在、個人のデータをリンクされたリストに保存し、ツリーを構築しようとしています。
各ツリー要素は、個人のデータへのポインター、インデックス (電話番号の一部に対応します。たとえば、番号が '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 node
Tree(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 オブジェクトを削除するのは良い考えだと思いましたが、それは本当に奇妙な結果につながるだけです。上記のコードが非常に明確かどうか、または簡単に理解できるかどうかはわかりませんが、誰かが私を助けてくれることを願っています...
たぶん私は何かを監視しているだけです...
前もって感謝します!
ロボネコ42