java 通过 一个list遍历 组成一个树形结构的例子
时间: 2024-02-11 15:09:29 浏览: 78
可以通过递归的方式将一个 list 转换成树形结构。下面是一个简单的 Java 代码示例:
```java
class TreeNode {
String name;
List<TreeNode> children;
public TreeNode(String name) {
this.name = name;
this.children = new ArrayList<>();
}
public void addChild(TreeNode child) {
children.add(child);
}
}
public class ListToTree {
public static void main(String[] args) {
List<String> list = Arrays.asList(
"A/B/C",
"A/B/D",
"E/F/G",
"H/I"
);
Map<String, TreeNode> map = new HashMap<>();
TreeNode root = null;
for (String s : list) {
String[] parts = s.split("/");
TreeNode node = map.get(parts[parts.length - 1]);
if (node == null) {
node = new TreeNode(parts[parts.length - 1]);
map.put(parts[parts.length - 1], node);
}
if (parts.length == 1) {
root = node;
} else {
String parentName = s.substring(0, s.lastIndexOf("/"));
TreeNode parent = map.get(parentName);
if (parent == null) {
parent = new TreeNode(parentName.substring(parentName.lastIndexOf("/") + 1));
map.put(parentName, parent);
}
parent.addChild(node);
}
}
printTree(root, 0);
}
private static void printTree(TreeNode node, int level) {
if (node == null) {
return;
}
for (int i = 0; i < level; i++) {
System.out.print(" ");
}
System.out.println("- " + node.name);
for (TreeNode child : node.children) {
printTree(child, level + 1);
}
}
}
```
在上面的示例中,我们将一个字符串列表转换成树形结构。每个字符串表示一个节点,节点之间用 `/` 分隔。例如,`A/B/C` 表示根节点 `A` 的一个子节点 `B` 的一个子节点 `C`。最后,我们输出整个树形结构。
阅读全文