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();
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: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étodoconcat
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 clasesPerson
cuyo año de nacimiento es posterior a 1970.