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
你有什麼至今,相當多,什麼都沒有。你需要真正做出真正的嘗試來真正完成任務,然後解釋還有哪些問題。 –