Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Cristian AC en 5 Mayo 2019, 05:44 am



Título: Consulta de codigo de arbol binario en C
Publicado por: Cristian AC en 5 Mayo 2019, 05:44 am
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;
}


Título: Re: Consulta de codigo de arbol binario en C
Publicado por: CalgaryCorpus en 5 Mayo 2019, 06:41 am
Si ab->izq es null, ese if tendra problemas al hacer ab->izq->izq o ab->izq->der
Lo mismo con ab->der


Título: Re: Consulta de codigo de arbol binario en C
Publicado por: Cristian AC en 5 Mayo 2019, 17:49 pm
Tenes razon, creo deberia agregarle otro caso base antes de llegar al if.
Algo tipo:

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

Gracias.