У меня есть большое количество объектов, расположенных в виде древовидной структуры (у каждого узла в дереве есть родители и дети, начиная с одного главного узла и заканчивая множеством дочерних узлов). Каждый объект имеет свой собственный идентификатор в виде строки, и существует много повторяющихся идентификаторов, но нет дубликатов, разделенных одним и тем же родителем. Пример:
Родитель А:
- ребенокА
- ребенокБ
- ребенокD
Родитель Б:
- ребенокА
- ребенокC
- ребенокD
Дерево также многослойное.
Мне нужен метод поиска объектов, который будет работать так (пример основан на предыдущем списке):
Пример 1:
- ArrayList со строкой {"childB"} передается алгоритму
- нет повторяющихся узлов с идентификатором «childB», поэтому возвращается ссылка на childB
Пример 2:
- ArrayList со строками {"parentA", "childD"} передается алгоритму
- нет повторяющихся узлов с идентификатором «childD» И родителем с идентификатором «parentA», поэтому возвращается ссылка на данный узел
Пример 3:
- ArrayList со строкой {"childD"} передается алгоритму
- есть повторяющиеся узлы с идентификатором «childD», поэтому алгоритм запрашивает дополнительную информацию (имя родителя (ей))
Имейте в виду, что может быть много уровней специфичности, например {"nodeA", "nodeD", "nodeX", "nodeD"}, поэтому потребуется какой-то цикл или, возможно, рекурсивный метод.
Итак, есть идеи?
Обновление: я создал алгоритм поиска в глубину для просмотра каждого узла дерева, и он работает очень хорошо. Алгоритм возвращает все узлы в виде одного списка ArrayList. Все, что мне сейчас нужно, — это способ выбрать один из них на основе различных степеней специфичности. Кто-нибудь может помочь с этим? Приведенные выше три примера показывают, что мне нужно.