code: def _build_McCreight(self, x):
          
          u = self.root
          d = 0
          for i in range(len(x)):
              while u.depth == d and u._has_transition(x[d+i]):
                  u = u._get_transition_link(x[d+i])
                  d = d + 1
                  while d < u.depth and x[u.idx + d] == x[i + d]:
                      d = d + 1
              if d < u.depth:
                  u = self._create_node(x, u, d)
              self._create_leaf(x, i, u, d)
              if not u._get_suffix_link():
                  self._compute_slink(x, u)
              u = u._get_suffix_link()
              d = d - 1
              if d < 0:
                  d = 0
docs: Builds a Suffix tree using McCreight O(n) algorithm.
  
          Algorithm based on:
          McCreight, Edward M. "A space-economical suffix tree construction algorithm." - ACM, 1976.
          Implementation based on:
          UH CS - 58093 String Processing Algorithms Lecture Notes