我有一个 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/