class Hund implements Comparable { String navn; Kull mittKull; Tidspunkt minFodselstid; Hund neste = null; Hund(Kull k, String navn, Tidspunkt fodt) { this.navn = navn; mittKull = k; minFodselstid = fodt; } @Override public int compareTo(Hund h) { // Oppgave 2b return minFodselstid.compareTo(h.minFodselstid); } // mor kan v?re null public Hund mor() { // Oppgave 2a return mittKull.mor; } public Hund far () { // Oppgave 2a return mittKull.far; } // true: hvis samme mor og samme far, alt annet => false public boolean erHelsosken(Hund h) { // Oppgave 2c return mor() != null && far() != null && mor().equals(h.mor()) && far().equals(h.far()); } public boolean erHalvsosken(Hund h) { // Oppgave 2c return ((mor() != null && mor().equals(h.mor())) || (far() != null && far().equals(h.far()))) && !erHelsosken(h); } public Hund finnEldsteKjenteOpphav() { // Base-tilfellet: hvis B?DE mor og far er NULL // rekursive, sjekke enten mor eller far (eller begge) return finnEldsteKjenteOpphavHjelp(this); } public Hund finnEldsteKjenteOpphavHjelp(Hund hund) { if (hund == null) return null; Hund mor = hund.mor(); Hund far = hund.far(); if (mor == null && far == null) return hund; // Hvis en av foreldrene er null: s? vet vi at vi m? sjekk den andre if (mor == null) return finnEldsteKjenteOpphavHjelp(far); if (far == null) return finnEldsteKjenteOpphavHjelp(mor); // Invariant: Hvis vi n?r dette punktet, s? eksisterer b?de mor og far Hund eldsteMor = finnEldsteKjenteOpphavHjelp(mor); Hund eldsteFar = finnEldsteKjenteOpphavHjelp(far); if (eldsteMor.compareTo(eldsteFar) < 0) { return eldsteMor; } else { // Hvis mor og far er like gamle, s? returneres far return eldsteFar; } } }