public class TreeNode { private String name; private Map<String, TreeNode> children; public TreeNode(String name) { this.name = name; this.children = new HashMap<>(); } public String getName() { return name; } public Map<String, TreeNode> getChildren() { return children; } public void addChild(TreeNode child) { this.children.put(child.getName(), child); } public String toJson() { Gson gson = new GsonBuilder().setPrettyPrinting().create(); return gson.toJson(this); } public static TreeNode buildTree(Map<String, Map<String, Object>> data) { // 构建根节点 String rootName = (String) data.keySet().toArray()[0]; TreeNode root = new TreeNode(rootName); // 递归构建子树 buildSubtree(root, data.get(rootName)); return root; } private static void buildSubtree(TreeNode parent, Map<String, Object> data) { for (String childName : data.keySet()) { if (data.get(childName) instanceof Map) { // 如果子节点是一个 Map,则递归构建子树 Map<String, Object> childData = (Map<String, Object>) data.get(childName); TreeNode child = new TreeNode(childName); parent.addChild(child); buildSubtree(child, childData); } else { // 如果子节点不是一个 Map,则创建叶子节点 String leafName = (String) data.get(childName); TreeNode leaf = new TreeNode(leafName); parent.addChild(leaf); } } } }根据以上代码补全此方法:public static TreeNode buildTree(Map<String, Object> data) { }
时间: 2024-02-14 11:14:48 浏览: 129
根据代码中的实现,输入数据是一个Map对象,其中包含了树的节点信息,我们需要构建这个树并返回根节点。由于树的节点可以有多个子节点,我们可以使用Map来表示每个节点的子节点。
首先,我们需要定义一个节点类,包含节点的名称以及子节点的Map:
```
public class TreeNode {
private String name;
private Map<String, TreeNode> children;
public TreeNode(String name) {
this.name = name;
this.children = new HashMap<>();
}
public String getName() {
return name;
}
public Map<String, TreeNode> getChildren() {
return children;
}
public void addChild(TreeNode child) {
this.children.put(child.getName(), child);
}
}
```
然后,我们可以使用递归来构建这个树。具体地,我们可以从根节点开始构建,递归地构建子树。我们需要在输入数据中查找当前节点的子节点,如果存在则递归构建子树,否则将子节点设置为叶子节点。
```
public static TreeNode buildTree(Map<String, Object> data) {
// 构建根节点
String rootName = (String) data.keySet().toArray()[0];
TreeNode root = new TreeNode(rootName);
// 递归构建子树
buildSubtree(root, (Map<String, Map<String, Object>>) data.get(rootName));
return root;
}
private static void buildSubtree(TreeNode parent, Map<String, Map<String, Object>> data) {
for (String childName : data.keySet()) {
Map<String, Object> childData = data.get(childName);
if (childData instanceof Map) {
// 如果子节点是一个 Map,则递归构建子树
TreeNode child = new TreeNode(childName);
parent.addChild(child);
buildSubtree(child, (Map<String, Map<String, Object>>) childData);
} else {
// 如果子节点不是一个 Map,则创建叶子节点
String leafName = (String) childData;
TreeNode leaf = new TreeNode(leafName);
parent.addChild(leaf);
}
}
}
```
这个方法的时间复杂度是O(n),其中n表示树节点的个数。
阅读全文