import java.io.File;
import java.util.*;
public class Osoba {
/**
* Meno osoby
*/
private String meno;
/**
* Zoznam deti osoby
*/
private List<Osoba> deti = new ArrayList<Osoba>();
/**
* Konstruktor osoby v strome potomkov
*
* @param meno
* meno osoby
*/
public Osoba(String meno) {
this.meno = meno;
}
/**
* Prida osobe dieta
*
* @param dieta
* referencia na pridavane dieta
*/
public void pridajDieta(Osoba dieta) {
deti.add(dieta);
}
/**
* Vrati celkovy pocet potomkov osoby
*/
public int pocetPotomkov() {
int pocetPotomkovDeti = 0;
for (Osoba dieta : deti)
pocetPotomkovDeti += dieta.pocetPotomkov();
return pocetPotomkovDeti + deti.size();
}
/**
* Vypise rodostrom osoby
*/
public void vypisRodostromIM() {
System.out.println(meno);
for (Osoba dieta : deti)
dieta.vypisRodostrom();
}
public int pocetGeneraciiIM() {
int pocet = 0;
int maximum = 0;
for (Osoba dieta : deti) {
pocet = dieta.pocetGeneracii() + 1;
if (pocet >= maximum)
maximum = pocet;
}
return maximum;
}
public void pridajDoZoznamu(List<Osoba> zoznam) {
zoznam.add(this);
for (Osoba dieta : deti) {
zoznam.add(dieta);
}
}
public int pocetGeneraciiPM() {
int vysledok = 0;
int maximum = 0;
for (Osoba dieta : deti) {
vysledok = dieta.pocetGeneracii() + 1;
if (vysledok > maximum) {
maximum = vysledok;
}
}
return maximum;
}
public void pridajDoZoznamuPM(List<Osoba> zoznam) {
for (Osoba dieta : deti) {
dieta.pridajDoZoznamu(zoznam);
zoznam.add(dieta);
}
}
public int pocetGeneraciiJA() {
int pocet = 0;
for (Osoba dieta : deti) {
pocet = Math.max(dieta.pocetGeneracii() +1, pocet ) ;
}
return pocet;
}
public void pridajDoZoznamuJA(List<Osoba> zoznam){
zoznam.add(this);
for (Osoba dieta : deti) {
if(dieta != null)
dieta.pridajDoZoznamu(zoznam) ;
}
}
public int pocetGeneraciiRG() {
int pocet=0;
if(deti==null){
return 0;
}
for (Osoba dieta: deti){
pocet = Math.max(pocet, dieta.pocetGeneracii()+1);
}
return pocet;
}
public void pridajDoZoznamuRG(List<Osoba> zoznam){
for (Osoba dieta: deti){
zoznam.add(dieta);
dieta.pridajDoZoznamu(zoznam);
}
}
public int pocetGeneraciiIB(){
int pocet=0;
int max=0;
if (deti.size()==0) {
return 0;
}
for (Osoba dieta: deti) {
pocet=dieta.pocetGeneracii()+1;
if (pocet>max) {
max=pocet;
}
}
return max;
}
public void pridajDoZoznamuIB(List<Osoba> zoznam){
zoznam.add(this);
for (Osoba dieta: deti)
dieta.pridajDoZoznamu(zoznam);
}
public int pocetGeneraciiDP() {
int pocet = 0;
for (Osoba d : deti) {
pocet = Math.max(d.pocetGeneracii(), pocet);
}
pocet += 1;
return pocet;
}
public void pridajDoZoznamuDP(List<Osoba> zoznam) {
for (Osoba dieta : deti) {
dieta.pridajDoZoznamu(zoznam);
}
zoznam.add(this);
}
/**
* Main s vytvorenim stromu potomkov pre Janka
*/
public static void main(String[] args) {
Osoba janko = new Osoba("Janko");
Osoba jozko = new Osoba("Jozko");
Osoba maria = new Osoba("Maria");
Osoba karol = new Osoba("Karol");
Osoba lucia = new Osoba("Lucia");
Osoba petra = new Osoba("Petra");
Osoba emil = new Osoba("Emil");
janko.pridajDieta(jozko);
janko.pridajDieta(maria);
janko.pridajDieta(karol);
karol.pridajDieta(lucia);
karol.pridajDieta(petra);
lucia.pridajDieta(emil);
List<Osoba> zoznam = new ArrayList<>();
janko.pridajDoZoznamu(zoznam);
for (int i = 0; i < zoznam.size(); i++) {
System.out.println(zoznam.get(i).meno);
}
// janko.vypisRodostrom();
// System.out.println(janko.pocetGeneracii());
}
}