龙空技术网

组装树形结构的返参

远山 28

前言:

当前小伙伴们对“数组转化成树形结构”大体比较注重,小伙伴们都想要分析一些“数组转化成树形结构”的相关资讯。那么小编也在网摘上收集了一些对于“数组转化成树形结构””的相关内容,希望我们能喜欢,兄弟们快快来了解一下吧!

前言:

在编程中,树形结构是一种常见的数据结构,用于表示具有层级关系的数据。比如机构树、菜单树、目录树、文件夹树等等。如下图是一个树形结构。

我们看到树形结构,首先想到的是使用递归函数来遍历和构造树形结构。然而,递归虽然直观,但在处理大型数据集时可能会导致性能问题,尤其是当递归深度过大时,稍不注意还可能引发栈溢出错误。基于类似哈希映射(HashMap)和迭代的方式,能够高效地处理大量数据,同时避免了递归带来的潜在问题。

基于哈希映射java实现递归

首先我们创建一个TreeNode节点类:

import lombok.Data;import java.util.ArrayList;import java.util.List;@Datapublic class TreeNode {        private String id;    private String parentId;    private List<TreeNode> children;    // 假设还有其他字段...        public TreeNode(String id, String parentId) {        this.id = id;        this.parentId = parentId;        this.children = new ArrayList<>();    }}

创建一个转换类TreeUtils:

import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;public class TreeUtils {        public static List<TreeNode> transformToTreeFormat(List<TreeNode> nodes) {        if (nodes == null || nodes.isEmpty()) {            return Collections.emptyList();        }                Map<String, TreeNode> idNodeMap = new HashMap<>();        for (TreeNode node : nodes) {            idNodeMap.put(node.getId(), node);        }                List<TreeNode> rootNodes = new ArrayList<>();        for (TreeNode node : nodes) {            TreeNode parentNode = idNodeMap.get(node.getParentId());            if(parentNode != null && !node.getId().equals(node.getParentId())){                if (parentNode.getChildren() == null) {                    parentNode.setChildren(new ArrayList<>());                }                parentNode.getChildren().add(node);            }else{                rootNodes.add(node);            }                    }        return rootNodes;    }    }

上述一个类定义的递归的属性,然后一个utils工具类即可实现递归的操作。下面我们 可以写个测试类进行验证:

import com.google.gson.Gson;import com.google.gson.JsonObject;import java.util.ArrayList;import java.util.List;public class TreeTest {    public static void main(String[] args) {        // 创建测试数据        List<TreeNode> nodes = new ArrayList<>();        nodes.add(new TreeNode("1", null)); // 根节点        nodes.add(new TreeNode("2", "1")); // 1的子节点        nodes.add(new TreeNode("3", "1")); // 1的子节点        nodes.add(new TreeNode("4", "2")); // 2的子节点        nodes.add(new TreeNode("5", "2")); // 2的子节点        nodes.add(new TreeNode("6", "3")); // 3的子节点        nodes.add(new TreeNode("7", null)); // 另一个根节点        nodes.add(new TreeNode("8", "7")); // 7的子节点        nodes.add(new TreeNode("9", "8")); // 8的子节点        nodes.add(new TreeNode("10", "8")); // 8的子节点                // 调用transformToTreeFormat方法转换节点列表为树形结构        List<TreeNode> tree = TreeUtils.transformToTreeFormat(nodes);            System.out.println(new Gson().toJson(tree));    }    }

最后,我们使用json在线工具,格式化生成的结构,即为树形结构的返回结果。

总结

上面使用了一个utils小工具实现树形结构。利用哈希映射的快速查找特性,避免了递归带来的性能开销。同时,通过两次遍历节点数组,我们可以有效地构建出完整的树形结构。

这种方法在处理大型数据集时表现出色。与递归方法相比,它的性能更好,且更加稳定。

标签: #数组转化成树形结构