簡體   English   中英

消毒n-ary樹

[英]Deserilizing n-ary tree

我應該反序列化一棵n-ary樹。

這段代碼創建了我的樹:

    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-ary樹。 在每行中,.OUT文件中的第一個單詞必須是父節點,以下單詞必須是子節點。 我不知道應該怎么做。 任何幫助表示贊賞。

到目前為止,我只有:void Ntree :: deserialize(string&filename); :P

這樣想吧。

你是如何創建樹的?

執行相同操作,但不使用文字值從文件中獲取值。 也可以使用循環而不是單獨的addChildren語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM