/////////// BinTrePrioritetsKø //////////////////////

package hjelpeklasser;

import java.util.*;

public class BinTrePrioritetsKø<T> implements PrioritetsKø<T>
{
  private static final class Node<T>   // en indre nodeklasse
  {
    private T verdi;                   // nodens verdi
    private Node<T> venstre, høyre;    // venstre og høyre barn
    private Node<T> forelder;          // nodens forelder

    private Node(T verdi, Node<T> f)   // konstruktør
    {
      this.verdi = verdi;
      venstre = høyre = null;
      forelder = f;
    }

    private Node(Node<T> f)            // konstruktør
    {
      this(null,f);
    }

  } // class Node

  private Node<T> rot;                         // peker til rotnoden
  private int antall;                          // antall noder
  private final Comparator<? super T> comp;    // komparator

  public BinTrePrioritetsKø(Comparator<? super T> c)      // konstruktør
  {
    rot = null;
    antall = 0;   // et tomt tre har 0 noder
    comp = c;
  }

  public static <T extends Comparable<? super T>>
  BinTrePrioritetsKø<T> naturligOrdenKø()
  {
    return new BinTrePrioritetsKø<>(Comparator.naturalOrder());
  }

  public static <T> BinTrePrioritetsKø<T> komparatorKø(Comparator<? super T> c)
  {
    return new BinTrePrioritetsKø<>(c);
  }

  @Override
  public int antall()
  {
    return antall;
  }

  @Override
  public boolean tom()
  {
    return antall == 0;
  }

  @Override
  public void leggInn(T verdi)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public T kikk()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public T taUt()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public boolean taUt(T verdi)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public String toString()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public void nullstill()
  {
    rot = null; antall = 0;
  }

} // BinTrePrioritetsKø