es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Teniendo problemas al recorrer de manera recursiva el árbol genealógico.

Tengo una clase Person con las siguientes propiedades: nombre, fecha de nacimiento y descendientes en forma de un array de otras clases Person.

En este momento estoy tratando de implementar una función que pueda recorrer este árbol genealógico comenzando desde la clase de Person original y devolver un array que contenga todas las clases Person cuyo año de nacimiento es posterior a 1970, pero estoy teniendo dificultades para implementar la recursión.

Mi problema es que no sé cómo hacer una recursión más profunda en el árbol genealógico después de verificar las fechas de nacimiento de las primeras y segundas capas del árbol.

Solo me pregunto si alguien tiene alguna pista.

“`
class Person {
constructor(nombre, nacimiento) {
this.nombre = nombre;
this.nacimiento = nacimiento;
this.desc = [];
}

adddesc(persona) {
this.desc.push(persona);
}

post1970() {
let res = [];
let nacimiento = this.nacimiento;
let descendientes = this.desc;

if (nacimiento > 1970) return this;

for (let i = 0; i < descendientes.length; i++) {
  let hijo = descendientes[i];
  let actual = hijo.post1970(); // ¿Qué debo hacer después de esta línea?
  console.log(actual);
}
return res;

}
}

const original = new Person(‘root’, 1900);

let desc1 = new Person(“andrew”, 1940);
let desc2 = new Person(“sarah”, 1960);

let desc3 = new Person(“charlie”, 1980);
let desc4 = new Person(“david”, 1990);
let desc5 = new Person(“ethan”, 2000);

original.adddesc(desc1); // Andrew + Charlie
original.adddesc(desc3);

desc1.adddesc(desc2); // Andrew: Sarah
desc3.adddesc(desc4); // Charlie: David
desc4.adddesc(desc5); // David: Ethan

original.post1970();

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para implementar una función recursiva que pueda recorrer el árbol genealógico, es necesario modificar la función post1970 para verificar de forma recursiva cada descendiente de una persona. Aquí tienes una implementación modificada:

    post1970() {
      let res = [];
      if (this.birth > 1970) res.push(this);
      let descendants = this.desc;
      for (let i = 0; i < descendants.length; i++) {
        let child = descendants[i];
        let curr = child.post1970();
        res = res.concat(curr);
      }
      return res;
    }
    

    En esta implementación, la función primero verifica si el año de nacimiento de la persona actual es posterior a 1970 y lo agrega al array de resultados si es así. Luego, verifica cada descendiente de forma recursiva llamando a la función post1970 en ellos. El método concat se utiliza para combinar los arrays de resultados de cada llamada recursiva, y se retorna el array final.

    Con esta implementación, llamar a original.post1970() debería devolver un array de todas las clases Person cuyo año de nacimiento es posterior a 1970.

Comments are closed.