Oppgave 1
private static <T> Node<T> dobbelHøyreRotasjon(Node<T> p) { Node<T> q = p.venstre; Node<T> r = q.høyre; q.høyre = r.venstre; r.venstre = q; p.venstre = r.høyre; r.høyre = p; return r; }
Oppgave 4
private static <T> void tilTabell(Node<T> p, Node<T>[] a, int[] indeks) { if (p.venstre != null) tilTabell(p.venstre,a,indeks); a[indeks[0]] = p; indeks[0]++; if (p.høyre != null) tilTabell(p.høyre,a,indeks); }
Oppgave 5
private static <T> Node<T> komplett(Node<T>[] a, int v, int h) { if (v > h) return null; // tomt intervall int n = h - v + 1; // antallet i intervallet int k = Integer.highestOneBit(n); // stripper n int m = n - (k >> 1); // k >> 1 svarer til k/2 m = (m < k ? m : k - 1) + v; // m relativt til v a[m].venstre = komplett(a, v, m - 1); // venstre subtre a[m].høyre = komplett(a, m + 1, h); // høyre subtre return a[m]; }
Oppgave 6
public void gjørKomplett() { Node[] a = new Node[antall]; int[] indeks = {0}; tilTabell(rot,a,indeks); for (int i = 0; i < a.length; i++) a[i].venstre = a[i].høyre = null; rot = komplett(a,0,antall-1); }