搜索非二叉树中的任何节点,即使找到多个节点,也要保持其父节点不变

时间:2018-02-16 14:00:25

标签: java tree stream

我正在尝试构建一个算法,该算法将针对任何搜索查询在树中搜索某些节点。 例如,在我们的应用程序树中填充了所有节点,包括两个节点,名称角色一个属于父名称数据,另一个节点一个属于父名称系统。现在,如果我提供了角色搜索条件,那么应该使用角色和父级对其进行过滤,并删除所有其他节点,如下所示:

 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 个答案:

答案 0 :(得分:1)

我修改了你的搜索算法,使它现在成为TreeNodeDTO类的成员,这是一种更好的面向对象的方法。此外,搜索必须返回如下列表:

neo4j-import