用c ++中的类实现树

时间:2015-09-27 10:42:28

标签: c++ tree

我试图实现一个树,它存储给定节点上的子矢量。我已经实现了查找节点的find_index函数。它有两个参数:Node * cur和一些key。我在insert工作时尝试使用此功能,但我不知道要搜索的Node*。这样的节点必须存在,但我不知道哪个节点要调用find_index。此外,我不知道我的功能是否正常工作。提前谢谢。

#include <iostream>
#include <vector>
using namespace std;
class Node{
    public:
    Node *parent;
    vector < Node* > children;
    string key;
    Node(){
        parent=NULL;
    }
};
class tree{
    public:
    int size;
        tree(){
            size=0;
        }
    Node* find_index(Node *cur,string key){
        Node *tmp;
        if(cur->key==key){
            tmp=cur;    
        }
        if(cur==NULL){
            tmp=NULL;
        }
        for(int i=0;i<cur->children.size();i++){
            find_index(cur->children[i],key);
        }
        return tmp;
    }
    void  add(){ 
        string father,son;
        while(cin>>father>>son){
            if(find_index(?,father)==NULL){//I don't know what node to put instead of question mark and is my function working
                size++;
                Node *newnode=new Node();
                newnode->key=father;
                newnode->parent=NULL;
            }
            else if(find_index(t,son)==NULL){
                size++;
                Node *newnode1=new Node();
                newnode1->key=son;
                newnode1->parent->children.push_back(newnode1);
            }
            else{
                Node *newnode2=new Node();
                newnode2->key=father;
                Node *newnode3=new Node();
                newnode3->key=son;
                newnode2->children.push_back(newnode3);
                newnode3->parent=newnode2;  
            }
        }
    }
};   

1 个答案:

答案 0 :(得分:1)

我怀疑你的代码是否有效。我可以看到以下问题:

  • find_index:如果cur为NULL,则会在cur->key(第一个if
  • 上进行分段错误
  • find_index:您永远不会评估foor循环中的结果
  • add:您需要存储?部分的树的根目录。

我不知道你的输入实际上是什么样的。如果我们知道输入会描述自上而下的树,我们可以存储一个根。我会在add期间存储多个根。这样,您也可以自下而上构建树。

可能的解决方案可能是something like this