用java写一段通过多个list来生成一棵树
时间: 2023-12-29 17:06:47 浏览: 27
好的,下面是一段通过多个List来生成一棵树的Java代码:
```java
import java.util.*;
public class TreeBuilder {
public static class TreeNode {
public int val;
public List<TreeNode> children;
public TreeNode(int val) {
this.val = val;
this.children = new ArrayList<>();
}
}
public static TreeNode buildTree(List<Integer> values, List<List<Integer>> children) {
Map<Integer, TreeNode> map = new HashMap<>();
// 创建所有节点
for (int val : values) {
TreeNode node = new TreeNode(val);
map.put(val, node);
}
// 添加所有子节点
for (int i = 0; i < children.size(); i++) {
List<Integer> childList = children.get(i);
int parentVal = values.get(i);
TreeNode parent = map.get(parentVal);
for (int childVal : childList) {
TreeNode child = map.get(childVal);
parent.children.add(child);
}
}
// 返回根节点
return map.get(values.get(0));
}
public static void main(String[] args) {
List<Integer> values = Arrays.asList(1, 2, 3, 4, 5);
List<List<Integer>> children = Arrays.asList(
Arrays.asList(2, 3),
Arrays.asList(4),
Arrays.asList(5),
Arrays.asList(),
Arrays.asList()
);
TreeNode root = buildTree(values, children);
System.out.println(root.val);
}
}
```
这段代码中,我们定义了一个 `TreeNode` 类来表示树的节点,其中 `val` 保存节点的值,`children` 保存所有子节点。 `buildTree` 方法接受两个参数,一个是节点值的列表 `values`,另一个是每个节点的子节点列表 `children`。我们先创建所有节点,然后再为每个节点添加子节点。最后返回根节点即可。在 `main` 方法中,我们演示了如何使用这个方法来创建一棵树,根节点的值为 1。
这段代码的时间复杂度为 $O(n)$,其中 $n$ 是节点的数量。