在TXT文件中按顺序写入二叉树
writing binary tree in a txt file preorderly
我有一个从二叉树中写东西的函数。当我运行它的时候,它只是在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();
...
}
相关文章:
- 从父数组测试用例构造二叉树失败
- 打印时有二叉树问题.用户输入不打印任何内容
- 试图找到二叉树的深度
- 二叉树级别顺序遍历在leetcode中
- 二叉树级别顺序插入 c++
- 使用二叉树的关卡顺序概念的垂直顺序遍历
- 二叉树级别顺序遍历 LeetCode
- 如何修复关卡顺序遍历问题(二叉树)的无限循环错误
- 二叉树顺序遍历在C++
- 按顺序打印时遇到问题,二叉树的后顺序等
- 二叉树顺序遍历错误:没有用于调用的匹配函数
- 使用递归的顺序二叉树遍历与使用堆栈的优缺点
- 使用级别顺序遍历将节点插入二叉树
- 二叉树顺序遍历导致堆栈溢出
- 无法使用非递归顺序方法遍历二叉树
- 线程内二叉树的插入或顺序遍历有什么问题
- 按字母顺序排列的二叉树
- 二叉树:迭代顺序打印
- 在TXT文件中按顺序写入二叉树
- c++递归打印二叉树的顺序问题