private int traverse(BinaryGraph graph) { if (graph.getLeft() == null && graph.getRight() == null) { return 0; } if (!_visited.contains(graph)) { _visited.add(graph); if (graph.getLeft() != null && graph.getRight() != null) { _steps++; } } return Math.max(traverse(graph.getLeft()), traverse(graph.getRight())) + 1; }