public static boolean validateOverhangs(ArrayList<RGraph> graphs) { boolean valid = true; for (RGraph graph : graphs) { ArrayList<RNode> queue = new ArrayList<RNode>(); HashSet<RNode> seenNodes = new HashSet<RNode>(); RNode root = graph.getRootNode(); queue.add(root); while (!queue.isEmpty()) { RNode current = queue.get(0); queue.remove(0); seenNodes.add(current); if (!("EX".equals(current.getLOverhang()) && "SP".equals(current.getROverhang()))) { return false; } ArrayList<RNode> neighbors = current.getNeighbors(); for (RNode neighbor : neighbors) { if (!seenNodes.contains(neighbor)) { queue.add(neighbor); } } } } return valid; }