java - 如何获取给定节点的所有叶子? (树只有 id_parent)

标签 java algorithm tree hierarchical-data nodes

我有一个 ArrayList<Foo> Java 中的结构具有标准的树状字段:id , id_parent , value

我想获取给定节点的所有叶子( id_element 的)的列表。

我的示例数据是:

Foo ArrayList<E>
    elementData Object[10]
        [0] Foo
            id          1333393146
            id_element  1333398441937
            id_parent   1333393120
            value       "1.1."
        [1] Foo
            id          1333393120
            id_element  0
            id_parent   0
            value       "1."
        [2] Foo
            id          1333400050
            id_element  0
            id_parent   0
            value       "2."
        [3] Foo
            id          1333400480
            id_element  0
            id_parent   1333400050
            value       "2.1."
        [4] Foo
            id          1333400596
            id_element  1335957085269
            id_parent   1333400480
            value       "2.1.1."
        [5] Foo
            id          1333401059
            id_element  1335957088564
            id_parent   1333400480
            value       "2.1.2."
        [6] Foo
            id          1333401973
            id_element  1335957090492
            id_parent   1333400480
            value       "2.1.3."
        [7] Foo
            id          1333401974
            id_element  1335957093220
            id_parent   1333400050
            value       "2.2."
        [8] Foo
            id          1333392031
            id_element  0
            id_parent   0
            value       "3."
        [9] Foo
            id          1333394672
            id_element  1335957098326
            id_parent   1333392031
            value       "3.1."

我需要做一个函数 public ArrayList<Long> GetIds(ArrayList<Foo> tree, Long id_node) { }其中 tree是我的结构,id_node是一个节点的id。

我只需要父节点叶子,不需要子节点。

例如:


输入:[以上结构],id = 1333400050

输出:1335957085269、1335957088564、1335957090492、1335957093220


我不知道为什么我对此停电了..

最佳答案

public static ArrayList<Long> getIds(ArrayList<Foo> tree, Long id_node) {
    ArrayList<Long> leaves = new ArrayList<Long>();
    for (Foo foo : tree) {
        if (foo.id_parent == id_node) {
            ArrayList<Long> ids = getIds(tree, foo.id);
            if (ids == null) {
                leaves.add(foo.id);
            } else {
                leaves.addAll(ids);
            }
        }
    }
    if (leaves.isEmpty()) {
        return null;
    }
    return leaves;
}

关于java - 如何获取给定节点的所有叶子? (树只有 id_parent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10413261/

相关文章:

java - 为 SQL 数据中的重复值分配标识符

c++ - 集合覆盖的贪心算法 C++

javascript - 将自然数转换为三位字符串的简单算法是什么?

algorithm - 计算对象树中的最大重复子树

java - maven:无法使预集成阶段工作

java - XML 不使用转义字符进行解析

c# - 从甲板上递归处理纸牌?

c++ - 当用户单击 Twig 时,如何逐步构建 Qt 树形小部件?

java - 从用户读取一行整数 - Java

java - kademila end emule 库