带有多个子节点的C ++树,用于电话号码反向搜索

时间:2013-01-07 18:27:34

标签: c++ search tree children inverse

我正在尝试编写一个程序来对电话号码进行反向搜索(用户给出一个数字,程序打印出相应的人+其他属于它的数字)。现在我已经将人员的数据保存在一个链表中,并且正在尝试将树木打包。

每个树元素将保存指向人的数据的指针,索引(对应于电话号码的一部分,例如,如果数字以'0'开头,则根的第一个子节点的索引为'0 ')和指向它的孩子的指针向量。

到目前为止我能做的是保存Tree中的第一个给定数字,但是当尝试在树中保存多个数字时似乎存在问题。也许问题是指向子节点的指针,但我不确定那里。这是代码的上述部分:

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

0 个答案:

没有答案