我正在尝试构建一个算法,该算法将针对任何搜索查询在树中搜索某些节点。 例如,在我们的应用程序树中填充了所有节点,包括两个节点,名称角色一个属于父名称数据,另一个节点一个属于父名称系统。现在,如果我提供了角色搜索条件,那么应该使用角色和父级对其进行过滤,并删除所有其他节点,如下所示:
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
}
答案 0 :(得分:1)
我修改了你的搜索算法,使它现在成为TreeNodeDTO类的成员,这是一种更好的面向对象的方法。此外,搜索必须返回如下列表:
neo4j-import