code: function findLCA_aux(node1, node2, graphIx, layoutInfo) {
    var graph = layoutInfo.graphSet[graphIx]; // If both nodes belongs to graphIx
  
    if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) {
      return {
        count: 2,
        graph: graphIx
      };
    } // Make recursive calls for all subgraphs
  
  
    var c = 0;
  
    for (var i = 0; i < graph.length; i++) {
      var nodeId = graph[i];
      var nodeIx = layoutInfo.idToIndex[nodeId];
      var children = layoutInfo.layoutNodes[nodeIx].children; // If the node has no child, skip it
  
      if (0 === children.length) {
        continue;
      }
  
      var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]];
      var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo);
  
      if (0 === result.count) {
        // Neither node1 nor node2 are present in this subgraph
        continue;
      } else if (1 === result.count) {
        // One of (node1, node2) is present in this subgraph
        c++;
  
        if (2 === c) {
          // We've already found both nodes, no need to keep searching
          break;
        }
      } else {
        // Both nodes are present in this subgraph
        return result;
      }
    }
  
    return {
      count: c,
      graph: graphIx
    };
  }
docs: @brief          : Auxiliary function used for LCA computation
  
  @arg node1      : node1's ID
  @arg node2      : node2's ID
  @arg graphIx    : subgraph index
  @arg layoutInfo : layoutInfo object
  
  @return         : object of the form {count: X, graph: Y}, where:
  X is the number of ancesters (max: 2) found in
  graphIx (and it's subgraphs),
  Y is the graph index of the lowest graph containing
  all X nodes