public void lock() { if (locked) return; locked = true; nodesWithSeveralChildren = new ArrayList<PNode<V, E>>(); nodesWithSeveralChildrenScaled = new ArrayList<PNode<V, E>>(); nodesWithSeveralParents = new ArrayList<PNode<V, E>>(); nodesWithoutChildren = new ArrayList<PNode<V, E>>(); sourceFakeEdges = new ArrayList<PEdge<V, E>>(); for (PNode<V, E> pnode : nodes) { if (pnode.isSource()) { PEdge<V, E> fakeEdge = new PEdge<V, E>(root, pnode); pnode.addParent(fakeEdge); root.addChild(fakeEdge); sourceFakeEdges.add(fakeEdge); } if (pnode.getChildren().size() >= 2) { nodesWithSeveralChildren.add(pnode); int i = pnode.getChildren().size(); while (--i > 0) { nodesWithSeveralChildrenScaled.add(pnode); } } if (pnode.getParents().size() >= 2) { nodesWithSeveralParents.add(pnode); } if (pnode.getChildren().size() == 0) { nodesWithoutChildren.add(pnode); } } }