code: public Concept lowestCommonAncestor(Concept v, Concept w) {
          if (v.taxonomy != w.taxonomy) {
              throw new IllegalArgumentException("Concepts are not from the same taxonomy.");
          }
  
          List<Concept> vPath = v.getPathFromRoot();
          List<Concept> wPath = w.getPathFromRoot();
  
          Iterator<Concept> vIter = vPath.iterator();
          Iterator<Concept> wIter = wPath.iterator();
  
          Concept commonAncestor = null;
          while (vIter.hasNext() && wIter.hasNext()) {
              Concept vAncestor = vIter.next();
              Concept wAncestor = wIter.next();
  
              if (vAncestor != wAncestor) {
                  return commonAncestor;
              } else {
                  commonAncestor = vAncestor;
              }
          }
  
          return commonAncestor;
      }
docs: Returns the lowest common ancestor (LCA) of concepts v and w. The lowest
  common ancestor is defined between two nodes v and w as the lowest node
  that has both v and w as descendants (where we allow a node to be a
  descendant of itself).