gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:37:24 25 4
gpt4 key购买 nike

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

 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

我还尝试修改现有的树结构以跟踪 parent 和 child ,并设置标志来跟踪 parent ,但我仍然坚持填充最终结果。

这是我的 treeNode 类

 public class TreeNodeDTO {

/** The id. */
private String id;

/** The title. */
private String title;

/** The children. */
private List<TreeNodeDTO> children;

//setters and getters
}

最佳答案

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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TreeNodeDTO {

/** The id. */
private String id;

/** The title. */
private String title;

/** The children. */
private List<TreeNodeDTO> children;

private List<TreeNodeDTO> recursiveSearch(String search) {
if ( getTitle().equalsIgnoreCase( search ) ) {
return Arrays.asList(this);
}
ArrayList<TreeNodeDTO> resultList = new ArrayList<>();
for (TreeNodeDTO child : getChildren()) {
resultList.addAll(child.recursiveSearch(search));
}
return resultList;
}

public String getId() {
return id;
}

public String getTitle() {
return title;
}

public List<TreeNodeDTO> getChildren() {
return children;
}

}

关于java - 搜索非二叉树中的任何节点,即使找到多个节点,也保持其父节点不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com