2016-11-27 21 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語句。