Я пытаюсь построить алгоритм, который будет искать некоторые узлы в дереве по любому поисковому запросу. Например, в нашем дереве приложения все узлы заполнены, включая два узла с именем Роли, один принадлежит родительскому имени Данные, а другой один принадлежит родительскому имени Система. Теперь, если я предоставлю критерий поиска ролей, дерево должно быть отфильтровано с обоими ролями, имеющими своих родителей, и удалить все остальные узлы следующим образом:
Data
-> Roles
System
-> Roles
Я очень старался получить такой результат, но с моим текущим алгоритмом, который я разработал
private TreeNodeDTO filterTree(String search,TreeNodeDTO
treeNodeDTO)
{
if ( treeNodeDTO.getTitle().equalsIgnoreCase( search ) ) {
return treeNodeDTO;
}
List< TreeNodeDTO > children = treeNodeDTO.getChildren();
TreeNodeDTO treeNodeDTOResult = null;
for ( int i = 0; treeNodeDTOResult == null && i < children.size(); i++ ) {
treeNodeDTOResult = filterTree( search, children.get( i ) );
}
return treeNodeDTOResult;
}
Я получаю только первые найденные узлы, что не является обязательным.
Data
-> Roles
Пока мне нужен следующий результат
Data
-> Roles
System
-> Roles
Я также попытался изменить существующую древовидную структуру, чтобы отслеживать родителей и детей, и установить флаги, чтобы отслеживать родителей, но все же я застрял на заполнении конечного результата.
Это мой класс treeNode
public class TreeNodeDTO {
/** The id. */
private String id;
/** The title. */
private String title;
/** The children. */
private List<TreeNodeDTO> children;
//setters and getters
}