【问题标题】:How to get all leaves of given node? (tree has only id_parent)如何获取给定节点的所有叶子? (树只有 id_parent)
【发布时间】:2012-05-02 11:57:29
【问题描述】:

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

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

我的示例数据是:

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&lt;Long&gt; GetIds(ArrayList&lt;Foo&gt; tree, Long id_node) { },其中tree是我的结构,id_node是一个节点的id。

我只需要父节点而不是子节点。

例如:


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

输出:1335957085269、1335957088564、1335957090492、1335957093220


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

【问题讨论】:

    标签: java algorithm tree hierarchical-data nodes


    【解决方案1】:
    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多