[英]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.