package ch.akuhn.hapax.cluster; public abstract class Dendrogram<E> { public static class Leaf<E> extends Dendrogram<E> { public final E element; public Leaf(E element) { this.element = element; } @Override public String toString() { return element.toString(); } } public static class Node<E> extends Dendrogram<E> { public final Dendrogram<E> left, right; public final double threshold; public Node(Dendrogram<E> left, Dendrogram<E> right, double threshold) { this.left = left; this.right = right; this.threshold = threshold; } @Override public String toString() { return String.format("(%s %s)", left, right); } } public Dendrogram<E> parent; public Dendrogram<E> merge(Dendrogram<E> dendro, double threshold) { return new Node<E>(this, dendro, threshold); } }