【发布时间】:2018-02-16 14:00:25
【问题描述】:
我正在尝试构建一种算法,该算法将针对任何搜索查询搜索树中的某些节点。 例如,在我们的应用程序树中填充了所有节点,包括 两个 名称为 Roles 的节点,一个属于父名称 Data,另一个属于一个属于父名称System。现在,如果我提供 roles 搜索条件,则应使用具有父级的角色过滤树并删除所有其他节点,如下所示:
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
}
【问题讨论】: