具体来说,我需要代表以下内容:
任何节点上的树都可以有任意数量的子节点
每个父节点(在根之后)只是一个String(其子节点也是字符串)
我需要能够获取父节点并列出所有子节点(某种列表或字符串数组)给定一个表示给定节点的输入字符串
根据父级和子级之间的引用关系动态填充树结构 . 给出的例子是我有一个member1赞助商另一个member2,member2赞助商成员3等等 . 已经有表记录关系
有没有可用的结构???
我的数据来自数据库或列表,我将使用名称和关系遍历信息,以确定节点是根,父还是子节点 .
所以在循环中,我找到了一个孩子,我需要一个对父母的引用,这样我就可以在将子元素添加到父元素之前将子元素关系与父元素进行比较 .
我找到的最接近的代码 .
public class TreeNode implements Iterable> {
T data;
TreeNode parent;
List> children;
public TreeNode(T data) {
this.data = data;
this.children = new LinkedList>();
}
public TreeNode addChild(T child) {
TreeNode childNode = new TreeNode(child);
childNode.parent = this;
this.children.add(childNode);
return childNode;
}
// other features ...
}
Sample usage:
TreeNode root = new TreeNode("root");
{
TreeNode node0 = root.addChild("node0");
TreeNode node1 = root.addChild("node1");
TreeNode node2 = root.addChild("node2");
{
TreeNode node20 = node2.addChild(null);
TreeNode node21 = node2.addChild("node21");
{
TreeNode node210 = node20.addChild("node210");
}
}
}
这就是我到目前为止所做的 . 父级将被最新条目覆盖,因此我无法检索先前添加的内容 .
public static TreeNode getSet1() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
String line;
while ((line = reader.readLine()) != null) {
String[] items = line.split(":");
String name = items[0];
String parent = items[1];
String type = items[2];
if (parent.equalsIgnoreCase("-") && type.equalsIgnoreCase("mainparent")) {
root = new TreeNode(name);
} else if (type.equalsIgnoreCase("ChildParent") && parent.equalsIgnoreCase(root.toString())) {
childParent = root.addChild(name);
} else if (type.equalsIgnoreCase("Child") && parent.equalsIgnoreCase(childParent.toString())) {
child = childParent.addChild(name);
}
}
return root;
}