Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Cristian AC

#1
Tenes razon, creo deberia agregarle otro caso base antes de llegar al if.
Algo tipo:

if(!ab->izq || !ab->der) return 0;

Gracias.
#2
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;
}