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 对象是个好主意,但这只会导致非常奇怪的结果。我不确定上面的代码是否非常清晰或者是否易于理解,但我希望你们中的一个可以帮助我......

也许我只是在监督一些事情......

先感谢您!

roboneko42

4

0 回答 0