当前位置: 首页 > 知识库问答 >
问题:

带有列表的树中的BFS

袁亦
2023-03-14

所以我正在构建这个树,它有1.*个节点,每个节点都有一个列表,这个列表本身可以有1.*个节点。

树的前三个层次我可以很好地构建,但如果我不编写所有层次的代码,它就不会更好地工作,因为这些层次都很愚蠢。解决方法当然是使用某种递归方法和一个BFS。

基本上,在我的TreeBuilder类中,我希望能够调用Tree.GetNodeSatDepth(深度))并获得该深度的所有节点的列表。问题是我不理解如何实现GetNodeSatDepth(深度)方法。

我找到的所有例子都是关于二叉树的。另一种方法是让addChild方法使用一个深度参数,这样我就可以指定在哪个深度插入子元素

最终,这就是我想要的:我有一棵有根的树。根有一个包含4个子节点的列表。我想要那四个孩子。为每个子节点生成三个节点。所以对于子0有3个子,子1有3个子,子3有3个子,子4有3个子。等等

也许一个可能的解决方案是在每个节点上都有一个level属性,然后搜索该节点,然后返回它的父节点。因为它的父级应该有一个在搜索节点处的所有节点的列表。

共有1个答案

松烨烨
2023-03-14

试试这个方法:

static void getNodesAtDepth(Node root, int currentLevel, int level, List<Node> nodes) {
    if(root == null) return;
    if(level == 0) {
        nodes.add(root);
        return;
    }

    if(currentLevel + 1 == level) {
        if(root.getNodeList() != null) {
            nodes.addAll(root.getNodeList());
        }
    }

    if(currentLevel < level) {
        if(root.getNodeList() != null) {
            for(Node node : root.getNodeList()) {
                getNodesAtDepth(node, currentLevel + 1,  level , nodes);
            }
        }
    }
}

如何使用:

List<Node> nodeList = new LinkedList<>();
getNodesAtDepth(root, 0, 2, nodeList);

root当然是树的根。nodeList将在所需级别存储所有节点(在我的例子中是2)。第二个参数始终为0,(用于跟踪当前级别)

 类似资料:
  • 问题内容: 我有一个对象A的列表。此列表中的每个对象A都包含对象B的列表,而对象B包含对象C的列表。对象C包含一个属性名称,我想使用它使用Java 8进行过滤。 如何使用流在Java 8中编写以下代码以避免嵌套循环: 问题答案: 您可以使用两个,然后使用a,然后可以选择第一个,或者如果没有结果返回:

  • 我有一个对象列表A。此列表中的每个对象A都包含对象B的列表,对象B包含对象C的列表。对象C包含一个属性名称,我想使用java 8进行过滤。 如何使用流在java8中编写下面的代码以避免嵌套循环:

  • 问题内容: 如何获取Python给定目录中所有文件(和目录)的列表? 问题答案: 这是遍历目录树中每个文件和目录的一种方式:

  • 问题内容: 我有一个带有字段的“页面”对象列表。此父字段引用列表中的另一个对象。我想基于此字段从此列表创建树层次结构。 这是我原始列表的样子: 我想将其转换为这样的树结构: 我希望可以在任何时候针对任意列表调用的可重用函数。有人知道解决这个问题的好方法吗?任何帮助或建议,将不胜感激! 问题答案: 小提琴

  • 目标是发送一个HTTP GET请求,其中包含表示枚举值的字符串列表问卷主题,然后使用这些参数选择正确主题的问题。我还添加了一个自定义转换器来将接收到的字符串转换为我的枚举。我的问题是当我在方法中调试时,“主题”总是为空。 这是我当前的RESTendpoint: 当我通过带有以下签名的方法传递单个主题时,我能够得到我的问题: 因此,将字符串转换为枚举似乎不是问题。 我尝试发送多个请求,但在endpo

  • 我有一个使用flowless项目的JavaFX列表。但是我得到了一个奇怪的边框(我没有启用任何边框,并且强制边框具有width=0px),它存在并且具有渐变效果: 当我将单元格background-inset设置为-1时,边框就没有了,所以我相信这个问题与背景有关。虽然这不是一个解决方案,因为如果我启用了边框(这是我想要的),渐变效果仍然存在。 有人知道我怎样才能摆脱这个边界吗? 谢谢!