2016-11-27 68 views
1

我应该反序列化正叉树。Deserilizing N叉树

此代码创建我的树:

foodtree.addChildren("Food", { "Plant", "Animal" }); 
    foodtree.addChildren("Plant", { "Roots", "Leaves", "Fruits" }); 
    foodtree.addChildren("Animal", { "Fish", "Mammals", "Birds" }); 
    foodtree.addChildren("Roots", { "Potatoes", "Carrots" }); 
    foodtree.addChildren("Leaves", { "Lettuce", "Cabbage" }); 
    foodtree.addChildren("Fruits", { "Apples", "Pears", "Plums", "Oranges" }); 
    foodtree.addChildren("Fish", { "Salmon", "Tuna" }); 
    foodtree.addChildren("Mammals", { "Beef", "Lamb" }); 
    foodtree.addChildren("Birds", { "Chicken", "Duck" }); 
    foodtree.addChildren("Salmon", { "Wild", "Farm" }); 
    foodtree.addChildren("Apples", { "GrannySmith", "Gala" }); 

其中第一个参数是父,第二个参数是一个初始化列表是第一个参数的孩子。

我的序列化功能如下:(我用2个功能做到这一点)

template<typename T> 
void Ntree<T>:: serializeHelper (node* r, ofstream& ofs) 
{ 
    if(r->child.size() > 0) 
     ofs<<r->val <<"  "; 

    for(int i=0; i < r->child.size(); i++) 
     ofs<<r->child[i]->val <<" "; 

    if(r->child.size() > 0) 
    ofs << "\n"; 

    vector<node*> vt = r->child; 

    for (int j = 0; j < vt.size(); j++) 
     serializeHelper(vt[j], ofs); 

} 


template <typename T> 
void Ntree<T>::serialize(std::string filename) 
{ 
    ofstream ofs(filename); 
    serializeHelper(root, ofs); 
} 

调用foodtree.serialize( “foodtree.out”)之后。我.OUT文件看起来像这样:

Food  Plant Animal 
Plant  Roots Leaves Fruits 
Roots  Potatoes Carrots 
Leaves  Lettuce Cabbage 
Fruits  Apples Pears Plums Oranges 
Apples  GrannySmith Gala 
Animal  Fish Mammals Birds 
Fish  Salmon Tuna 
Salmon  Wild Farm 
Mammals  Beef Lamb 
Birds  Chicken Duck 

我希望写这将在此文件并创建一个n元树中的反序列化功能。在每行中,.OUT文件中的第一个单词必须是父节点,以下单词必须是子节点。我不知道我应该怎么做。任何帮助表示赞赏。

所有我至今是:无效Ntree ::反序列化(串&文件名); :P

+1

你有什么至今,相当多,什么都没有。你需要真正做出真正的尝试来真正完成任务,然后解释还有哪些问题。 –

回答

0

认为它这样。

你是如何创建摆在首位的树?

做的一样,只是不使用文字值从文件中获取的值。还使用循环代替单独的addChildren语句。