1

電話番号の逆検索を行うプログラムを作成しようとしています (ユーザーが番号を指定すると、プログラムは対応する人 + それに属する他の番号を出力します)。現在、個人のデータをリンクされたリストに保存し、ツリーを構築しようとしています。

各ツリー要素は、個人のデータへのポインター、インデックス (電話番号の一部に対応します。たとえば、番号が '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

4

0 に答える 0