@Override
 public boolean isLeaf(String object) {
   Tree tree = vertexMap.get(object);
   if (tree != null) {
     return tree.isLeaf();
   } else {
     return false;
   }
 }
 private int getMaximumLeafSize(Tree tree, int max) {
   if (tree.isLeaf()) {
     return Math.max(max, tree.getFrequencySum());
   } else {
     Iterator<Edge> e = tree.childIterator();
     int maximum = max;
     while (e.hasNext()) {
       Edge edge = e.next();
       Tree child = edge.getChild();
       maximum = Math.max(maximum, getMaximumLeafSize(child, maximum));
     }
     return maximum;
   }
 }
 @Override
 public String getVertexName(String object) {
   Tree node = vertexMap.get(object);
   String name = "";
   if (node != null) {
     if (node.isLeaf()) {
       name = node.getLabel();
     } else {
       Iterator<Edge> e = node.childIterator();
       while (e.hasNext()) {
         SplitCondition condition = e.next().getCondition();
         name = condition.getAttributeName();
         break;
       }
     }
   }
   return name;
 }
  private void addTree(
      DirectedOrderedSparseMultigraph<String, String> treeGraph, Tree node, String parentName) {
    Iterator<Edge> e = node.childIterator();
    double edgeWeightSum = 0.0d;
    while (e.hasNext()) {
      Edge edge = e.next();
      Tree child = edge.getChild();
      edgeWeightSum += child.getSubtreeFrequencySum();
    }

    e = node.childIterator();
    while (e.hasNext()) {
      Edge edge = e.next();
      Tree child = edge.getChild();
      SplitCondition condition = edge.getCondition();
      String childName = vertexFactory.create();
      String edgeName = edgeFactory.create();
      vertexMap.put(childName, child);
      edgeMap.put(edgeName, condition);
      edgeStrengthMap.put(edgeName, child.getSubtreeFrequencySum() / edgeWeightSum);
      treeGraph.addEdge(edgeName, parentName, childName);
      addTree(treeGraph, child, childName);
    }
  }
 @Override
 public String getVertexToolTip(String object) {
   Tree tree = vertexMap.get(object);
   if (tree != null) {
     StringBuffer result = new StringBuffer();
     if (tree.isLeaf()) {
       String labelString = tree.getLabel();
       if (labelString != null) {
         result.append("<html><b>Class:</b>&nbsp;" + labelString + "<br>");
         result.append("<b>Size:</b>&nbsp;" + tree.getFrequencySum() + "<br>");
         result.append(
             "<b>Class frequencies:</b>&nbsp;"
                 + SwingTools.transformToolTipText(tree.getCounterMap().toString())
                 + "</html>");
       }
     } else {
       result.append(
           "<html><b>Subtree Size:</b>&nbsp;" + tree.getSubtreeFrequencySum() + "</html>");
     }
     return result.toString();
   } else {
     return null;
   }
 }