Немного подумав, вы можете сделать это за O (n) время, хотя это потребует некоторых дополнительных вещей, которые добавят некоторые накладные расходы. (Все еще O (n)).
Вы можете использовать какую-то универсальную схему хеширования, чтобы создать хорошую хеш-таблицу. По сути, хэш идентификатором экземпляра.
-Возьмите каждую очередь и добавьте ее в какой-нибудь двусвязный узел.
- Вставьте каждый узел в хеш-таблицу.
- При вставке проверьте, есть ли родитель и / или дочерний элемент в хеш-таблице, и сделайте соответствующую ссылку.
_ когда вы закончите, начните с головы (которую вы должны выяснить при первом проходе), пройдитесь по списку и добавьте его в свой LinkedList или просто используйте получившийся дважды связанный список.
Для этого требуется один проход, который равен O (n), а для хеш-таблицы требуется O (n) для инициализации, а для вставок - O (1).
Оставленная вам проблема заключается в выборе хорошей реализации хеш-таблицы, которая даст вам такие результаты.
Кроме того, вы должны учитывать нехватку памяти, так как я не знаю, сколько результатов вы ожидаете. Надеюсь, достаточно, чтобы сохранить в памяти.
Я не знаю или думаю, что существует решение на основе SQL-запросов, но мои знания SQL очень ограничены.
Надеюсь, это поможет!