将二叉树写入文件,再读出重新构建
来源:互联网 发布:淘宝助理5.5官方 编辑:程序博客网 时间:2024/06/16 16:09
代码如下:
/******************************* * * 功能:生成一棵二叉树,写进文件,再读出, * 并将其重构成一个二叉树 * * author:kangquan2008@scut blog:http://blog.csdn.net/kangquan2008 * ******************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_SIZE 20typedef struct Node{char data;struct Node * lchild;struct Node * rchild;}* Tree,Node;void create_tree(Tree * tree){int data,data2;data = fgetc(stdin);data2 = getc(stdin);// 吸收回车键,或用 getchar() :) 注意返回值是整数!if(data == 'z')// 遇到z结束{*tree = NULL;return ;}if(!(*tree = malloc(sizeof(Node))))exit(-1);(*tree)->data = data;create_tree(&((*tree)->lchild));create_tree(&((*tree)->rchild));}void pre_order_fun(Tree tree){if(tree == NULL)return ;printf("%c ",tree->data);pre_order_fun(tree->lchild);pre_order_fun(tree->rchild);}void in_order_fun(Tree tree){if(tree == NULL)return ;in_order_fun(tree->lchild);printf("%c ",tree->data);in_order_fun(tree->rchild);}void pre_order_file(Tree tree,FILE * file){if(tree == NULL)return ;printf("%c ",tree->data);fputc(tree->data,file);pre_order_file(tree->lchild,file);pre_order_file(tree->rchild,file);}void in_order_file(Tree tree,FILE * file){if(tree == NULL)return ;in_order_file(tree->lchild,file);printf("%c ",tree->data);fputc(tree->data,file);in_order_file(tree->rchild,file);}void get_from_file(char pre[],char in[],FILE * file){char all[MAX_SIZE * 2];rewind(file);fgets(all,sizeof(all),file);int i;for(i=0; i<strlen(all); i++){if(i < strlen(all)/2)pre[i] = all[i];else in[i-strlen(all)/2] = all[i];if(i == strlen(all)/2)pre[i] = '\0';}in[i-strlen(all)/2] = '\0';}void form_tree(char pre[],char in[],int len,Tree * tree){if(len > 0){char * p = in;for(; p!= NULL; p++)if(*p == *pre)break;int left_size = p - in;*tree = malloc(sizeof(Node));(*tree)->data = *pre;(*tree)->lchild = NULL;(*tree)->rchild = NULL;form_tree(pre+1,in,left_size,&((*tree)->lchild));form_tree(pre+left_size+1,p+1,len-left_size-1,&((*tree)->rchild));}}int main(){Tree tree = NULL;create_tree(&tree);FILE * file;file = fopen("./test.txt","w+");if(file == NULL){printf("can not open!");exit(EXIT_FAILURE);}pre_order_file(tree,file);in_order_file(tree,file);puts("");char pre[MAX_SIZE] ;//= "1234567";char in[MAX_SIZE] ;//= "3241657";get_from_file(pre,in,file);puts(pre);puts(in);Tree target_tree = NULL;form_tree(pre,in,strlen(pre),&target_tree);pre_order_fun(target_tree);in_order_fun(target_tree);return 0;}/*123zz4zz56zz7zz按上面的输入,即可生成下面的树,写入文件并读出重新构建 1 2 5 3 4 6 7*/
- 将二叉树写入文件,再读出重新构建
- 写入cookie,再读出cookie
- 重新构建二叉树
- C++ 将一个文件读入数组再读出数组
- 从键盘输入两个学生数据,写入一个文件中, 再读出这两个学生的数据显示在屏幕上。
- 将流写入文件
- 将字符串写入文件
- 将数据写入文件
- 将数据写入文件
- 将InputStream写入文件
- 将字符串写入文件
- 将字符串写入文件
- shell脚本连接oracle数据库并将查询出的数据写入文件
- 重新构建树
- AS3将图片保存到SharedObject中然后再读出的
- 重新认识二叉树
- 将APK文件重新签名
- 如何将CBitmap写入文件
- 笑话几则
- BitTorrent协议
- 2011名企面试题(网上收集)
- ubuntu 11.04 打开终端 /如何更改Ubuntu系统中的root密码
- 工作中小感
- 将二叉树写入文件,再读出重新构建
- js声明变量
- stack--实现
- 虚拟机 VirtualPC 2007 单机组网
- 初来乍到
- 一个信息可视化Demo的设计(一):系统架构
- 找啊找啊找GF(gf.pas/c/cpp)
- 宇宙的奥秘 人类诞生后十个影响力最大理论
- 字符设备驱动初阶