Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;电话号码反向搜索的多个子树_C++_Search_Tree_Children_Inverse - Fatal编程技术网

C++ C++;电话号码反向搜索的多个子树

C++ C++;电话号码反向搜索的多个子树,c++,search,tree,children,inverse,C++,Search,Tree,Children,Inverse,我正试图编写一个程序,对电话号码进行反向搜索(用户给出一个号码,程序打印出相应的人+其他属于它的号码)。现在,我已经将这些人的数据保存在一个链表中,并试图建立一棵树 每个树元素将保存一个指向个人数据的指针、一个索引(对应于电话号码的一部分,例如,如果号码以“0”开头,则根的第一个子节点的索引为“0”)和指向其子节点的指针向量 到目前为止,我所能做的是保存树中的第一个给定数字,但在尝试在树中保存多个数字时似乎出现了问题。可能问题在于指向子节点的指针,但我不确定是否存在。下面是代码的上述部分: cl

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

每个树元素将保存一个指向个人数据的指针、一个索引(对应于电话号码的一部分,例如,如果号码以“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];
        }
    }
  }
}
类树{
公众:
Datensatz*data;//存储在节点中的数据
char number;//节点索引-电话号码的一部分
树*wurzel;//根
vector nextEls;//节点子节点的向量
树木(int zahl);
/*
部门职能
*/
void add(vector);//调用以将电话号码添加到树中
};
空树::hinzufRek(向量telNum)
{   
Tree*aktEl=new Tree();//最新节点
aktEl=this->wurzel;//以root开头
整数检查=0;
对于(int i=0;inquels.size()!=0){
int j;
对于(j=0;jnextEls.size();j++){
如果(h==aktEl->nextEls[j]->number){//如果节点子节点中已经存在最新的编号。。。
aktEl=aktEl->nextEls[j];
检查=1;
打破
}
}
如果(检查==0){
aktEl->nextEls.push_back(新树(h));
aktEl=aktEl->nextEls[j];
}
}
else{//如果没有最新节点的当前子节点
aktEl->nextEls.push_back(新树(h));
aktEl=aktEl->nextEls[0];
}
}
}
}
此外,我认为删除函数末尾的Tree*aktEl对象是个好主意,但这只会导致非常奇怪的结果。我不确定上面的代码是否非常清楚或者是否容易理解,但我希望你们中的一位能够帮助我

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

提前谢谢你


roboneko42

除非需要当前的实现(例如,作为家庭作业的一部分),否则只需使用
std::map
。同意Jerry的观点,std::map将大大简化您的任务。如果我没有弄错的话,std::map也将数据存储在树结构中,从而可以快速访问您的数据。不,那不是拼写错误。如需删除,请使用
唯一\u ptr