Esempio n. 1
0
// Funcionando
int height(Node *n) {
    
    // Testa se o ponteiro é NULL... OBS: RETORNAR ERRO OU ZERO (ÁRVORE VAZIA)?
    if (n == NULL) {
        printf("ERRO! Ponteiro dado é NULL");
        exit(-1);                
    }
    
    int i;		// contador
    int alt;		// altura da subárvore corrente
    int alt_max = 0;    // altura da maior (sub)árvore encontrada entre os filhos de n
        
    // Caso seja uma folha, retorna altura igual a 1
    if (nb_of_children(n) == 0) { return 1; }       
    // Senão calcula recursivamente 
    else {
        // Calcula a altura da maior subárvore
        for (i = 0; i < nb_of_children(n); i++) {
            alt = height(child(n,i));

            // Se altura calculada é maior que máxima já encontrada até agora, armazena o novo valor
	    if (alt > alt_max) {
                alt_max = alt;
//		printf("Passou height()"); 
	    }
	}
    }
    // Retorna a altura da maior subárvore + 1 (nodo pai)
    return alt_max + 1;
}
Esempio n. 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);
}
Esempio n. 3
0
//uncompile FILE* outfile,     outfile,
void uncompile(FILE* outfile, Node *n){
	int i;

	switch(n->type){
		case nodo_coringa:
		case nodo_tipounico:
		case nodo_tipolista:

		case nodo_idf:

		case nodo_int:
		case nodo_float:

		case nodo_if:
		case nodo_while:
		case nodo_end:
		case nodo_else:

		case nodo_true:
		case nodo_false:
			fprintf(outfile,"%s ",n->lexeme);
	}

	for (i = 0; i < nb_of_children(n); i++)
		uncompile(outfile, child(n, i));
}
Esempio n. 4
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;
}
Esempio n. 5
0
//height
int height(Node *n){	
	int max = 0, i, h;
	if(n != NULL){
		for(i = 0; i < nb_of_children(n); i++){
			h = height(child(n, i));
			if(max < h)
				max = h;
		}
		max++;
	}
	return max;
}
Esempio n. 6
0
// Funcionando
Node* child(Node* n, int i) {
    // Testa se o ponteiro dado é NULL
    if (n == NULL) {
        printf("ERRO! Ponteiro dado é NULL");
        exit(-1);                
    }

    // Testa se i está dentro do num_child do nodo recebido como parametro
    if ( (i < 0) || (i >= nb_of_children(n)) ) {
	printf("ERRO! Número índice incorreto (Fora do intervalo de filhos)");
        exit(-1);
    }
    // Retorna i-ésimo filho requerido
    return n->child[i];

}