int main (int argc, char *argv[]){ FILE *f = NULL; Tree *tree = NULL; EleTree *pele = NULL; Cadena* cad = NULL; int numnodos, profundidad; char cadena[MAX], buscar[MAX]; if(argc != 2){ /*Comprobamos argumentos*/ printf("Faltan argumentos\n"); return -1; } f = fopen (argv[1], "r"); /*Abrimos el fichero recibido como argumento*/ if (!f){ return -1; } tree = tree_ini(); /*Inicializamos el árbol en el que vamos a guardar las cadenas*/ if (!tree){ fclose(f); return -1; } while (feof(f) == 0){ /*Bucle que lee uno a uno las cadenas del fichero*/ fscanf (f, "%s\n", cadena); /*Guardamos el dato leido en cadena*/ pele = eletree_ini(); /*Inicializamos un EleTree*/ if (!pele){ fclose(f); tree_free(tree); return -1; } cad = cadena_ini(); /*Inicializamos una cadena*/ if(!cad){ eletree_free(pele); fclose(f); tree_free(tree); return -1; } if(!cadena_setInfo(cad, cadena)){ fclose(f); tree_free(tree); eletree_free(pele); cadena_free(cad); return -1; } if (!eletree_setInfo (pele, cad)){ /*Asignamos al EleTree la cadena guardada*/ fclose(f); tree_free(tree); eletree_free(pele); cadena_free(cad); return -1; } tree_insert (tree, pele); /*Insertamos el EleTree en el árbol*/ eletree_free(pele); cadena_free(cad); } numnodos = tree_numNodes (tree); profundidad = tree_depth (tree); printf ("Número de nodos: %d\n", numnodos); printf ("Profundidad: %d\n", profundidad); if(tree_inOrder(stdout, tree) == ERROR){ fclose (f); tree_free(tree); return -1; } printf ("Introduce una cadena para buscar en el árbol (siguiendo el mismo formato que en el fichero de entrada): "); scanf ("%s", buscar); pele = eletree_ini(); /*Inicializamos un EleTree*/ if (!pele){ fclose (f); tree_free(tree); return -1; } cad = cadena_ini(); /*Inicializamos una cadena*/ if(!cad){ fclose (f); tree_free(tree); eletree_free(pele); return -1; } if(!cadena_setInfo(cad, buscar)){ fclose(f); tree_free(tree); eletree_free(pele); cadena_free(cad); return -1; } if (!eletree_setInfo(pele, cad)){ /*Asignamos al EleTree la cadena "buscar"*/ fclose (f); tree_free(tree); eletree_free(pele); return -1; } if (tree_findEleTree (tree, pele) == TRUE){ /*Buscamos en el árbol el entero introducido previamente*/ printf ("El dato %s se encuentra dentro del árbol\n", buscar); } else { printf ("El dato %s NO se encuentra dentro del árbol\n", buscar); } tree_free(tree); /*Liberamos toda la memoria*/ eletree_free(pele); fclose (f); cadena_free(cad); return -1; }
int main(int argc, char** argv) { struct tree* tree; ALLOC_PTR(tree); assert(tree != 0); tree_ini(tree, 50); // int tree_node_add(struct tree* vtree, int value) int rc = tree_node_add(tree, 10); rc = tree_node_add(tree, 20); rc = tree_node_add(tree, 1); rc = tree_node_add(tree, 4); //fail rc = tree_node_add(tree, 120); rc = tree_node_add(tree, 110); rc = tree_node_add(tree, 130); rc = tree_node_add(tree, 100); //fail rc = tree_node_add(tree, 3); //fail inorder_tree_walk(tree->root); size_t start = 0; size_t finish = 0; struct node* t = 0; start = checkpoint(); t = tree_search(tree->root, 120); finish = checkpoint(); printf("\nrecursuve search %i\n", t->value); printf("time recursive: %zu\n", finish - start); start = finish = 0; start = checkpoint(); t = iterative_tree_search(tree->root, 120); finish = checkpoint(); printf("\niterative search %i\n", t->value); printf("time iterative: %zu\n", finish - start); t = tree_minimum(tree->root); printf("minimum: %i \n", t->value); t = tree_maximum(tree->root); printf("maximum: %i \n", t->value); struct node* temp; ALLOC_PTR(temp); assert(temp != 0); temp->value = 64; temp->right = 0; temp->left = 0; //T - дерево, z - указатель на вставляемую вершину tree_insert(tree, temp); inorder_tree_walk(tree->root); /* tree = tree_node_add(tree, 1, 1); //bad bug tree = tree_node_add(tree, 4, 1); tree = tree_node_add(tree, 2, 0); tree = tree_node_add(tree, 3, 0); tree = tree_node_add(tree, 4, 1); */ //tree_print(tree); /* tree_fini(tree); */ return 0; }