在TXT文件中按顺序写入二叉树

writing binary tree in a txt file preorderly

本文关键字:二叉树 顺序 TXT 文件      更新时间:2023-10-16

我有一个从二叉树中写东西的函数。当我运行它的时候,它只是在txt文件中写入树的根结点。谁能告诉我这是怎么回事?

void tree::wrte(person *p)
{
    ofstream out("myfile.txt");
    struct register{
        char ID[15];    
        char name[30];      
        char surname[30];       
    };                              
    register reg;   
    if(!(mybook=fopen("myfile.txt","a+")))
    {                           
        if (!(mybook=fopen("myfile.txt","w+")))
        {                                             
            cerr<<"Couldnt opened"<<endl;return;                  
        }                                                                
    }                                          
    if(p)                   
    {                               
        strcpy(reg.name,p->name);               
        strcpy(reg.ID,p->ID);                           
        strcpy(reg.surname,p->surname);                         
        out << reg.ID <<'t'<<reg.name<<'t'<<reg.surname<<'t'<<endl;  
        wrte(p->left);                                                          
        wrte(p->right);                                                                 
    }                                                                                       
    out.close();                
}

如果每次调用wrte()都必须打开文件,我会修改代码,在再次递归调用write之前关闭当前流:

if(p)
{
    ...
    out << reg.ID <<'t'<<reg.name<<'t'<<reg.surname<<'t'<<endl;
    out.close();
    wrte(p->left);
    wrte(p->right);
    ...

然而,更好的设计是将ostream传递给wrte()函数:

void tree::wrte(ostream& out, person *p){
    ...
    if(p)
    {
        ...
        out << reg.ID <<'t'<<reg.name<<'t'<<reg.surname<<'t'<<endl;
        wrte(out, p->left);
        wrte(out, p->right);
    }
    ...
}

然后在第一次调用wrte()之前打开输出流:

int main()
{
    ...
    ofstream out("myfile.txt");
    ...
    tree_ptr->wrte(out, p);
    out.close();
    ...
}