java搜索非二叉树中的任何节点,即使找到多个节点,也保持它们的父节点完好无损
我正在尝试构建一个算法,该算法将根据任何搜索查询搜索树中的一些节点。 例如,在我们的应用程序树中,包含所有节点,包括两个名为角色的节点,一个属于父名称数据,另一个属于父名称系统。现在,如果我提供一个角色搜索条件,则应过滤树,其中两个角色都有其父节点,并删除所有其他节点,如下所示:
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
}
# 1 楼答案
我已经修改了您的搜索算法,因此它现在是TreeNodeTo类的成员,这是一种更好的面向对象方法。此外,搜索必须返回如下列表: