如何在给定节点的所有叶子? (树只有id_parent) [英] How to get all leaves of given node? (tree has only id_parent)

查看:144
本文介绍了如何在给定节点的所有叶子? (树只有id_parent)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个的ArrayList<富> 结构的Java 标准树状领域: ID id_parent

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

我的示例数据为:

 富的ArrayList< E>
    elementData中对象[10]
        [0]的Foo
            ID 1333393146
            id_element 1333398441937
            id_parent 1333393120
            值1.1。
        [1]的Foo
            ID 1333393120
            id_element 0
            id_parent 0
            值1。
        [2]富
            ID 1333400050
            id_element 0
            id_parent 0
            值2。
        [3]富
            ID 1333400480
            id_element 0
            id_parent 1333400050
            值2.1。
        [4]富
            ID 1333400596
            id_element 1335957085269
            id_parent 1333400480
            值2.1.1。
        [5]富
            ID 1333401059
            id_element 1335957088564
            id_parent 1333400480
            值2.1.2。
        [6]富
            ID 1333401973
            id_element 1335957090492
            id_parent 1333400480
            值2.1.3。
        [7]富
            ID 1333401974
            id_element 1335957093220
            id_parent 1333400050
            值2.2。
        [8]富
            ID 1333392031
            id_element 0
            id_parent 0
            值3。
        [9]的Foo
            ID 1333394672
            id_element 1335957098326
            id_parent 1333392031
            值3.1。
 

我需要做一个函数公开的ArrayList<龙> GetIds(ArrayList的<富>树,龙id_node){} ,其中是我的结构, id_node 是一个节点的ID。

我只需要父节点离开没有子节点。

例如:


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

输出:1335957085269,1335957088564,1335957090492,1335957093220


我不知道为什么我有一个关于这个停电。

解决方案

 公共静态的ArrayList<龙> getIds(ArrayList的<富>树,龙id_node){
    ArrayList的<龙>叶=新的ArrayList<龙>();
    对于(富富:树){
        如果(foo.id_parent == id_node){
            ArrayList的<龙> IDS = getIds(树,foo.id);
            如果(IDS == NULL){
                leaves.add(foo.id);
            } 其他 {
                leaves.addAll(IDS);
            }
        }
    }
    如果(leaves.isEmpty()){
        返回null;
    }
    返回叶;
}
 

I have an ArrayList<Foo> structure in Java with standard tree-like fields: id, id_parent, value

I want to get a list of all leaves (id_element's) of a given node.

My example data is:

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."

I need to do a function public ArrayList<Long> GetIds(ArrayList<Foo> tree, Long id_node) { } where tree is my structure, and id_node is an id of a node.

I need only parent node leaves not child nodes.

e.g.:


input: [above structure], id = 1333400050

output: 1335957085269, 1335957088564, 1335957090492, 1335957093220


I do not know why I have a blackout about this..

解决方案

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;
}

这篇关于如何在给定节点的所有叶子? (树只有id_parent)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆