在java中,我有一个树状结构的数据,除了第一层只有一个节点,其它每层的节点数量都不确定。请帮我实现一个方法,入参是一个List,List中放了树上的节点,例如[node3.1,node3.2,node3.3],出参是[{name:node1,child:[{name:node2.1,child:[{name:node3.1,child:[]},{name:node3.2,child:[]}]},{name:node2.2,child:[{name:node3.3,child:[]}}]}]}]这样
时间: 2024-03-17 20:39:43 浏览: 116
好的,可以使用递归的方式来解决这个问题。我们可以先找到根节点,然后依次往下遍历,将每个节点加入到它的父节点的child列表中。以下是一个可能的实现:
```java
public class TreeNode {
private String name;
private List<TreeNode> child;
public TreeNode(String name) {
this.name = name;
this.child = new ArrayList<>();
}
public void addChild(TreeNode node) {
child.add(node);
}
public String getName() {
return name;
}
public List<TreeNode> getChild() {
return child;
}
public static List<TreeNode> buildTree(List<String> nodes) {
// 找到根节点
String rootName = nodes.get(0);
TreeNode root = new TreeNode(rootName);
// 递归构建树
buildSubTree(root, nodes.subList(1, nodes.size()));
List<TreeNode> result = new ArrayList<>();
result.add(root);
return result;
}
private static void buildSubTree(TreeNode parent, List<String> nodes) {
while (!nodes.isEmpty()) {
String currentName = nodes.get(0);
TreeNode currentNode = new TreeNode(currentName);
parent.addChild(currentNode);
nodes.remove(0);
// 如果下一个节点是当前节点的子节点,则递归构建子树
while (!nodes.isEmpty() && nodes.get(0).startsWith(currentName + ".")) {
buildSubTree(currentNode, nodes.subList(1, nodes.size()));
}
}
}
}
```
这个实现中,我们首先找到根节点,然后调用buildSubTree方法来构建整颗树。buildSubTree方法会依次遍历当前节点的子节点,并递归构建子树。如果当前节点已经没有子节点了,那么递归结束。最后,我们将根节点放入一个列表中返回即可。
使用这个实现,我们可以这样构建一颗树:
```java
List<String> nodes = Arrays.asList("node1", "node2.1", "node3.1", "node3.2", "node2.2", "node3.3");
List<TreeNode> tree = TreeNode.buildTree(nodes);
```
这个代码会生成一个包含一颗树的列表。我们可以使用JSON序列化库将这个列表序列化成JSON格式。
阅读全文