欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > java实现树形递归

java实现树形递归

2025/2/23 14:10:50 来源:https://blog.csdn.net/qq_41228643/article/details/145183870  浏览:    关键词:java实现树形递归
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;public class TreeBuilder {// 定义树节点结构static class TreeNode {private int id;private int parentId;private String name;private List<TreeNode> children = new ArrayList<>();public TreeNode(int id, int parentId, String name) {this.id = id;this.parentId = parentId;this.name = name;}public int getId() {return id;}public int getParentId() {return parentId;}public String getName() {return name;}public List<TreeNode> getChildren() {return children;}public void addChild(TreeNode child) {this.children.add(child);}@Overridepublic String toString() {return "TreeNode{" +"id=" + id +", name='" + name + '\'' +", children=" + children +'}';}}/*** 构建树形结构* @param nodes 原始节点列表* @return 树的根节点列表*/public static List<TreeNode> buildTree(List<TreeNode> nodes) {// 创建一个映射,用于快速查找节点Map<Integer, TreeNode> nodeMap = nodes.stream().collect(Collectors.toMap(TreeNode::getId, node -> node));// 保存根节点列表List<TreeNode> rootNodes = new ArrayList<>();// 构建树形结构for (TreeNode node : nodes) {if (node.getParentId() == 0) {// 根节点rootNodes.add(node);} else {// 找到父节点并将当前节点添加为其子节点TreeNode parent = nodeMap.get(node.getParentId());if (parent != null) {parent.addChild(node);}}}return rootNodes;}public static void main(String[] args) {// 模拟数据List<TreeNode> nodeList = new ArrayList<>();nodeList.add(new TreeNode(1, 0, "Root1"));nodeList.add(new TreeNode(2, 0, "Root2"));nodeList.add(new TreeNode(3, 1, "Child1.1"));nodeList.add(new TreeNode(4, 1, "Child1.2"));nodeList.add(new TreeNode(5, 3, "Child1.1.1"));nodeList.add(new TreeNode(6, 2, "Child2.1"));// 构建树List<TreeNode> tree = buildTree(nodeList);// 打印结果System.out.println(tree);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词