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);
}