@Override void delEdge(Edge<T> e) { getFathers.remove(e.getFather(), e.getSon()); Node<T> father = getFather(e.getSon()); Node<T> n = tNode.get(e.getSon()); if (father == null) { tree.remove(n); } else if (father != n.getFather()) { tree.move(father, n); } }
boolean takeFirst(Node<T> a, Node<T> b) { if (a == null) { return false; } if (b == null) { return true; } if (b.getLevel() > a.getLevel()) { return true; } return (b.getLevel() == a.getLevel() && ((Comparable<T>) b.getValue()).compareTo(a.getValue()) > 0); }
@Override void addEdge(Edge<T> e) { Node<T> fatherN = tNode.get(e.getFather()); Node<T> son = tNode.get(e.getSon()); /* * Vérifie qu'il n'a pas déjà un père et un autre. */ if (son != null && (son.getFather() != null || !son.getFather().getValue().equals(e.getFather()))) { if (takeFirst(fatherN, son.getFather())) { /* * On déplace si le level est plus petit si les level sont egaux * on prend T du père en compte */ tree.move(fatherN, son); } } else { Node<T> n = tree.add(fatherN, e); tNode.put(n.getValue(), n); } }