下面是使用Java将一个List运用递归转成树形结构的完整攻略,包含两条示例说明:
1. 准备工作
在开始转换之前,我们需要先定义好树节点的数据结构,在Java中,可以用一个类来表示树节点,并在其中定义节点的基本属性和方法,如下所示:
class Node {
int id;
String name;
List<Node> children;
public Node(int id, String name) {
this.id = id;
this.name = name;
children = new ArrayList<>();
}
}
在上面的代码中,我们定义了一个Node类表示一个树节点,其中包含的基本属性有节点id和节点名称,另外还包含了子节点列表children。在构造函数中,我们初始化了children列表。
2. 将List转成树形结构
接下来,我们就可以来实现将List转成树形结构的递归函数了。这个递归函数会接受一个List和一个父节点id作为输入参数,并返回一个以该父节点为根节点的树,其代码如下:
public Node buildTree(List<Node> nodeList, int parentId) {
Node parentNode = null;
for (Node node : nodeList) {
if (node.id == parentId) {
parentNode = node;
break;
}
}
if (parentNode != null) {
for (Node node : nodeList) {
if (node.id != parentId && node.id / 100 == parentId / 100) {
Node childNode = buildTree(nodeList, node.id);
parentNode.children.add(childNode);
}
}
}
return parentNode;
}
上面的代码中,我们首先遍历整个节点列表,找到父节点id对应的节点,并将其赋值给变量parentNode。然后,我们遍历整个节点列表,找到所有parentId以当前parentNode的id为前缀的节点,并将其转换成树节点并添加到parentNode的children列表中。
最后,我们返回parentNode,即为我们需要的以parentId为根节点的树。
3. 示例一
我们来看一个简单的示例。假设我们有一个包含以下数据的List:
List<Node> nodeList = Arrays.asList(
new Node(100, "A"),
new Node(101, "B"),
new Node(102, "C"),
new Node(103, "D"),
new Node(201, "E"),
new Node(202, "F"),
new Node(203, "G")
);
假设我们想要以100作为根节点,将它和它的子节点转换成树形结构。我们可以调用以下代码:
Node parentNode = buildTree(nodeList, 100);
最后的parentNode包含以下结构:
-A
|-B
|-C
|-D
4. 示例二
我们再来看一个稍微复杂一点的示例。假设我们有一个包含以下数据的List:
List<Node> nodeList = Arrays.asList(
new Node(100, "A"),
new Node(101, "B"),
new Node(102, "C"),
new Node(103, "D"),
new Node(201, "E"),
new Node(202, "F"),
new Node(203, "G") ,
new Node(301, "H"),
new Node(302, "I"),
new Node(303, "J"),
new Node(401, "K"),
new Node(402, "L"),
);
假设我们想要以201作为根节点,将它和它的子节点转换成树形结构。我们可以调用以下代码:
Node parentNode = buildTree(nodeList, 201);
最后的parentNode包含以下结构:
-E
|-H
|-I
|-J
-F
-G
以上就是使用Java将一个List运用递归转成树形结构的完整攻略,希望可以帮助到您。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Java将一个List运用递归转成树形结构案例 - Python技术站