我想在java中实现一个Generic Tree,我想在同一个表中使用一个表。表的结构如下所示。
public class MyTreeNode {
private int id;
private int parentId;
private MyTreeNode parent;
private List<MyTreeNode> childNodes;
// further fields..
}
NAME OF TABLE IS **TREE_TABLE**
PK_ID | PARENT
---------- |----------
1 | null
2 | 1
3 | 1
4 | 2
意思是,具有PK_ID 2和3的节点将节点1作为父节点,4具有2作为父节点,1节点没有父节点(空)。
如何在Java代码中实现此功能。如果您有此代码,或者如果您可以共享代码,请使用任何示例代码,请分享它。
要求:从underlyng SQL Server数据库访问上表并重建树结构,以便设置Parent和Child之间的关系。
此致 迪帕克
答案 0 :(得分:2)
将所有节点放入按顺序创建的arrayList中。该算法假定按PK_ID的顺序获取表行。
nodes = emptyArrayList
for each row in your table:
node n = new Node(PK_ID)
nodes.add(n)
if (PARENT != null)
nodes.get(PARENT).addChild(n)
之后,nodes [0]是树的根。我不打算向您展示如何创建树数据结构。
编辑:关于树
至于你的树,每个节点应该只知道它下面的节点,而不是上面的节点。因此不需要您的父ID和父节点字段。否则,它看起来不错。
编辑:有关树形结构的更多信息:
正如我所说,你的树形结构很好。它可以只是一个具有id和子节点列表的类。这就是你所需要的一切。
答案 1 :(得分:1)
使用OO语言编写树的基础知识:
您需要某种类型的Node类 保存数据和引用 (父母,孩子,兄弟姐妹等 - 取决于实施情况)
处理树时,递归就是 你的朋友。
答案 2 :(得分:0)
我会使用HashMap
:
HashMap<Integer, Integer> table = new HashMap<Integer, Integer>();
table.put(1, null);
table.put(2, 1);
table.put(3, 1);
table.put(4, 2);