예제 #1
0
//deep_free_node
int deep_free_node(Node* n){
	int i;	
	if(n != NULL){
		for(i = 0; i < nb_of_children(n); i++)
			deep_free_node(child(n, i));
		free(n);
	}
	return 0;
}
예제 #2
0
int main ()
{
   Node *pf1, *pf3, *pf0;
   Node **children;

   pf1 = create_leaf(1, int_node, "1", NULL);
   pf3 = create_leaf(1, int_node, "2", NULL);
   pack_nodes(&children, 0, pf1);
   pack_nodes(&children, 1, pf3);
   printf("h = %d\n", height(pf1)); /* deve imprimir 1 */
   pf0 = create_node(1, int_node, "0", NULL, 2, children); /* pf0 é o pai de pf1 e pf3 */
   printf("h = %d\n", height(pf0)); /* deve imiprimir 2 */
   printf("n = %d\n", nb_of_children(pf0)); /* deve imprimir 2 */
   printf("n = %d\n", nb_of_children(child(pf0, 0))); /* deve imprimir 0, porque o retorno de child é o filho de pf0, que é uma folha. */
   deep_free_node(pf0);
}
예제 #3
0
파일: node.c 프로젝트: rodrigocz/pico
// MAIS OU MENOS... TESTAR
// Return 0, ok...
int deep_free_node(Node* n) {
    //Testa se o ponteiro dado é NULL
    if (n == NULL) {
        printf("ERRO! Ponteiro dado é NULL");
        exit(-1);                
    }

    int i;         // iterador de laço
    
    //  Testa se existem filhos para serem desalocados
    //  Não sei se precisaria disso...
//    if ( n->num_child == 0 ) {
//        free(n);      // Desaloca n, e retorna zero (n não possui filhos)
//        return 0;
//    }
    // Caso contrário, vai liberando para cada filho, recursivamente
    for (i=0; i < n->num_child; i++) {
        deep_free_node(n->child[i]);
    }
    
    // Desaloca o nodo corrente
    free(n);
    return 0; // tanto faz
}
int main(int argc, char *argv[])
{
	/*
	 * 					n
	 * 				t		a
	 * 			b
	 * */
	
	Node** children1;
	Node** children2;
	
	Node* b = create_leaf(4,305, "lexeme ( b ) \n", NULL);
	pack_nodes(&children1, 0, b);
	
	Node* t = create_node(23, 305, "lexeme ( t ) \n", NULL, 1, children1);

	
	Node* a = create_leaf(5, 302, "lexeme ( a ) \n", NULL);
	pack_nodes(&children2, 0, t);
	pack_nodes(&children2, 1, a);

	Node* n = create_node(5, 302, "lexeme ( n ) : root  \n", NULL, 2, children2);
	
	/* imprime a altura da arvore */
	printf ( "height: %d \n", height(a));
	printf ( "%s" , n->lexeme);
	printf ( "%s" , child(n,1)->lexeme);
	printf ( "%s" , child(n,2)->lexeme);
	printf ( "%s", child(child(n,1),1)->lexeme);

		
	deep_free_node(n);

	return 0;
	
}