Hola, queria hacer una consulta sobre un codigo que use para responder un punto de mi examen.
Lo hice con un recorrido preorder y usando un wrapper.
Queria saber si el codigo funciona con ese IF largo asi, porque nunca me dijeron que lo podia usar asi, pero es lo unico que se me ocurrio en ese momento.
Gracias.
Me piden implementar una primitiva que recibe un arbol binario y devuelve la cantidad de nodos que son abuelos completos.
Abuelos completos: Quiere decir que tiene tanto hijo izquierdo como derecho, y ambos hijos tambien tienen hijos izquierdos y derechos.
typedef struct ab{
struct ab* izq;
struct ab* der;
void* dato;
}ab_t;
size_t ab_abuelos(const ab_t* ab){
if(!ab) return 0;
size_t suma = 0;
return _ab_abuelos(ab, suma);
}
size_t _ab_abuelos(const ab_t* ab, size_t suma){
if(!ab) return 0;
if(ab->izq->izq && ab->izq->der && ab->der->izq && ab->der->der) suma++;
_ab_abuelos(ab->izq, suma);
_ab_abuelos(ab->der, suma);
return suma;
}
Lo hice con un recorrido preorder y usando un wrapper.
Queria saber si el codigo funciona con ese IF largo asi, porque nunca me dijeron que lo podia usar asi, pero es lo unico que se me ocurrio en ese momento.
Gracias.
Me piden implementar una primitiva que recibe un arbol binario y devuelve la cantidad de nodos que son abuelos completos.
Abuelos completos: Quiere decir que tiene tanto hijo izquierdo como derecho, y ambos hijos tambien tienen hijos izquierdos y derechos.
typedef struct ab{
struct ab* izq;
struct ab* der;
void* dato;
}ab_t;
size_t ab_abuelos(const ab_t* ab){
if(!ab) return 0;
size_t suma = 0;
return _ab_abuelos(ab, suma);
}
size_t _ab_abuelos(const ab_t* ab, size_t suma){
if(!ab) return 0;
if(ab->izq->izq && ab->izq->der && ab->der->izq && ab->der->der) suma++;
_ab_abuelos(ab->izq, suma);
_ab_abuelos(ab->der, suma);
return suma;
}