用java写 一个list对象中有根据父子级关系组成父子结构 有多个父子级关系 且父级不是最顶级
时间: 2024-03-26 20:39:45 浏览: 88
java版list-map实现 树结构 父子结构 通俗易懂
3星 · 编辑精心推荐
好的,这是一个比较常见的树形结构的问题。可以使用递归的方式,将给定的列表转换成树形结构。具体实现如下:
首先,我们需要定义一个节点类,用于表示树形结构中的节点。每个节点包含一个值和它的子节点列表。
```
public class TreeNode {
private String value;
private List<TreeNode> children;
public TreeNode(String value) {
this.value = value;
this.children = new ArrayList<>();
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
public void addChild(TreeNode child) {
this.children.add(child);
}
}
```
接下来,我们需要实现一个函数,将给定的列表转换成树形结构。我们可以定义一个递归函数,每次取出一个节点,将它插入到它的父节点的子节点列表中,然后递归处理它的子节点。
```
public static List<TreeNode> buildTree(List<String[]> list) {
Map<String, TreeNode> map = new HashMap<>();
// 第一次遍历:将每个节点加入到 map 中
for (String[] item : list) {
String parentValue = item[0];
String childValue = item[1];
TreeNode parent = map.get(parentValue);
if (parent == null) {
parent = new TreeNode(parentValue);
map.put(parentValue, parent);
}
TreeNode child = map.get(childValue);
if (child == null) {
child = new TreeNode(childValue);
map.put(childValue, child);
}
parent.addChild(child);
}
// 第二次遍历:找到根节点
List<TreeNode> roots = new ArrayList<>();
for (TreeNode node : map.values()) {
if (node.getValue() != null && node.getChildren().size() > 0) {
roots.add(node);
}
}
return roots;
}
```
这个函数的输入是一个列表,每个元素是一个包含两个字符串的数组,表示父子关系。输出是一个树形结构,每个节点包含一个值和它的子节点列表。如果一个节点没有父节点,它就是根节点。
阅读全文