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