m_avrina
@m_avrina
Студентота.

Работа с деревьями, записываем и выписываем из файла?

Доброго времени суток, решил начать делать акинатор, простенький
так вот, просто тренируюсь работать с деревьями, и столкнулся с проблемой вычитывания дерева из файла
Записать выходит, вроде верно
а вычитать-нет(
вот код, может увидете ошибку(

*это в мейне присваиваю корню значение и выделяю память*
akinator = fopen("trees.txt", "w");
	root = (akinator_node*)malloc(sizeof(akinator_node));
	root_reade= (akinator_node*)malloc(sizeof(akinator_node));
	root->key = 20;
	root->left = NULL;
	root->right = NULL;


функция вставки элемента
akinator_node* insert(akinator_node* root, int key)
{
	if (root == nullptr)
	{
		root = (akinator_node*)malloc(sizeof(akinator_node));
		root->key = key;
		root->left = NULL;
		root->right = NULL;
		return root ;
	}
	 if (key<root->key)
	{
		if (root->left == NULL)
		{
			root->left = (akinator_node*)malloc(sizeof(akinator_node));
			root->left->left = NULL;
			root->left->right = NULL;
			root->left->key = key;
			return root;
		}
		 insert(root->left, key);
	}
	else
	{
		if (root->right == NULL)
		{
			root->right = (akinator_node*)malloc(sizeof(akinator_node));
			root->right->left = NULL;
			root->right->right = NULL;
			root->right->key = key;
			return root;
		}
		 insert(root->right, key);
	}

}


функции записи и чтения
void write_from_file(akinator_node *root, FILE*akinator)
{
	if (root == NULL)
	{
		fprintf(akinator, "%d ", MARK);
		return;
	}
	else
	{
		fprintf(akinator, "%d ", root->key);
		write_from_file(root->left, akinator);
		write_from_file(root->right, akinator);
	}
}
void reader_from_file(akinator_node *root, FILE*akinator)
{
	int val = 0;
	if (!fscanf(akinator, "%d ", &val) || val == MARK)
		return;
		
		 insert(root,val);
		reader_from_file(root->left, akinator);
		reader_from_file(root->right, akinator);	
}
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы