Deserilizing n-ary tree

Deserilizing n-ary tree

本文关键字:tree n-ary Deserilizing      更新时间:2023-10-16

我应该对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&amp; filename);:p

以这种方式考虑。

首先是如何创建树?

做同样的事情,除非而不是使用文字值从文件中获取值。还使用循环而不是单独的addchildren语句。