SuffixTree::initializationFromContainer(ConcatenatedUnistringContainer *container) { std::vector *permutation = container->suffixArray(); std::queue task_queue = std::queue(); root = new TreeVertex(); queue.push(new Task(root, 0, permutation->size() - 1, 0)); while (!queue.empty()) { Task *task_current = queue.pop(); std::vector factor_positions = std::vector(); std::vector lcp_values = std::vector(); long low = task_current.left_bound; long high = task_current.right_bound; int cutted_prefix_size = task_current.cutted_prefix_size; while (low <= high) { long middle = (high - low) >> 1; if (low > high) break; lcp1 = container->LCP(low, middle); lcp2 = container->LCP(low, middle + 1); if (lcp1 > lcp2) { task_current->vertex queue.push(new task()); factor_positions.push_back(middle); } } } }