私はC BSTライブラリを実行していて、バイナリ検索ツリーをテキストファイルに保存する機能を実行しようとしています。私はそれを行う方法をかなり混乱させています。構造:木のCバイナリ検索ツリーをtxtファイルに保存する
struct Node {
int value;
struct Node *left;
struct Node *right;
};
typedef struct Node TNode;
typedef struct Node *binary_tree;
が作成:それに要素を追加する
binary_tree NewBinaryTree(int value_root) {
binary_tree newRoot = malloc(sizeof(TNode));
if (newRoot) {
newRoot->value = value_root;
newRoot->left = NULL;
newRoot->right = NULL;
}
return newRoot;
}
:
void Insert(binary_tree *tree, int val) {
if (*tree == NULL) {
*tree = (binary_tree)malloc(sizeof(TNode));
(*tree)->value = val;
(*tree)->left = NULL;
(*tree)->right = NULL;
} else {
if (val < (*tree)->value) {
Insert(&(*tree)->left, val);
} else {
Insert(&(*tree)->right, val);
}
}
}
私は開始をしました機能が、私はこれを行う方法を知らない:
void savetree(binary_tree *tree, char * filename)
{
FILE *afile;
int remainn, counter, readsize, i;
int *bb;
afile = fopen(filename, "wb");
if (afile) {
bb = calloc(sizeof(int), BBSIZE); //BBSIZE =4096
remainn = treesize(tree);
counter = 0;
while (remainn > 0) {
if (remainn > BBSIZE) {
readsize = BBSIZE;
} else {
readsize = remainn;
}
がHERESにtreesize機能:
int treesize(binary_tree tree)
{
if(tree == NULL)
{
return (0) ;
}
else
{
return(1 + treesize(tree->left) + treesize(tree->right)) ;
}
}
このsavetree機能が完了していないが、私がやった場合は/それを完了する方法についてイムわかりません正しい。
ありがとう
''してくださいtypedefは構造体のノード* binary_treeポインタをtypedef'ないでください; '。読むのは本当に苦しいです。 – Stargateur
あなたが記述している能力を「シリアライゼーション」といいます。バイナリツリーを作成し、それをディスク上のファイルにシリアル化し、逆シリアル化してメモリに戻すことができます。これには多くの言語に依存しないアルゴリズムがあります。最初の近似のためのGoogleの「バイナリツリーの直列化」。 – stackoverflowuser2010