Hello! Help me please. It is required to write a program with a binary tree.
#include <cstdlib> #include <iostream> #include <stdio.h> #include <fstream> using namespace std; struct bin_node //--------------одна из вершин { int data; bin_node *left; bin_node *right; }; struct bin_tree // -----само дерево { bin_node *root; // вершина int count; //количество вершин }; int all[13]; //-----------прототипы функций------------------------ void vvod(); struct bin_tree *bin_create(); int bin_insert(struct bin_tree *mytree, int); void write_in_file(bin_node * node, ofstream &); //------------------------------------- int main() { setlocale(LC_ALL, "Russian"); setlocale(LC_ALL, " "); ofstream o; vvod(); int all[13]; struct bin_tree *mytree = bin_create(); // присвоение дереву выделенной под него памяти struct bin_node *node; for (int i = 0; i < 13; i++) { bin_insert((bin_tree *) mytree, all[i]); } node = mytree->root; printf("\n после прохода по дереву \n"); write_in_file(node, o); o.close(); getchar(); getchar(); return 0; } //-------------создание дерева--------------------------- struct bin_tree *bin_create() { struct bin_tree *mytree = (bin_tree *) malloc(sizeof *mytree); if (mytree == NULL) return NULL; else { mytree->root = NULL; //пустой корень mytree->count = 0; // нуль вершин } }; //--------------поиск вершины------------------------------------ int bin_search(const struct bin_tree *mytree, int item) { const struct bin_node *node; assert(mytree != NULL); //если дерево существует node = mytree->root; for (;;) { if (node == NULL) return 0; if (item == node->data) // если искомое значение совпадает с data, return 1; // возвращаем 1 if (item > node->data) node = node->right; //если больше, шагаем в правый узел else if (item < node->data) node = node->left; } } //--------------------вставка в узел---------------------------------- int bin_insert(struct bin_tree *mytree, int item) { bin_node *node; // указатель на значение Bin_node bin_node **nee; // указатель на адрес bin_node assert(mytree != NULL); nee = &mytree->root; //пишем адрес в nee node = mytree->root; for (;;) // цикл добавления { if (node == NULL) { *nee = (bin_node *) malloc(sizeof *node); node = *nee; if (node != NULL) { node->data = item; node->left = NULL; node->right = NULL; mytree->count++; return 1; } else return 0; } else if (item == node->data) return 2; else if (item > node->data) { nee = &node->right; node = node->right; } else if (item < node->data) { nee = &node->left; node = node->left; } } } void vvod() { printf("...\n"); for (int i = 0; i < 13; i++) { scanf("%d", &all[i]); } printf("\näî îáõîäà: \n"); for (int i = 0; i < 13; i++) { printf("%d ", all[i]); } } void write_in_file(bin_node * node, ofstream & o) { o.open("file.txt"); if (node != NULL) // åñëè äåðåâî íå ïóñòî { write_in_file(node->right, o); o << node->data << " "; // ïèøåì â ôàéë printf("%d ", node->data); write_in_file(node->left, o); } }
The program is compiled, but gives an error. I can not find it .... error somewhere in bin_insert