Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}