实现树形结构的高效方法

发布于:2025-03-11 ⋅ 阅读:(36) ⋅ 点赞:(0)

实现树形结构的高效方法

1.效果图

[
	{
		"id": 1,
		"name": "Root",
		"pid": 0,
		"code": "ROOT",
		"children": [
			{
				"id": 2,
				"name": "Node 1",
				"pid": 1,
				"code": "N001",
				"children": [
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					}
				]
			},
			{
				"id": 3,
				"name": "Node 2",
				"pid": 1,
				"code": "N002",
				"children": [
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					}
				]
			},
			{
				"id": 2,
				"name": "Node 1",
				"pid": 1,
				"code": "N001",
				"children": [
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					}
				]
			},
			{
				"id": 3,
				"name": "Node 2",
				"pid": 1,
				"code": "N002",
				"children": [
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					}
				]
			},
			{
				"id": 2,
				"name": "Node 1",
				"pid": 1,
				"code": "N001",
				"children": [
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					}
				]
			},
			{
				"id": 3,
				"name": "Node 2",
				"pid": 1,
				"code": "N002",
				"children": [
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					}
				]
			},
			{
				"id": 2,
				"name": "Node 1",
				"pid": 1,
				"code": "N001",
				"children": [
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					},
					{
						"id": 4,
						"name": "Node 1.1",
						"pid": 2,
						"code": "N0011"
					}
				]
			},
			{
				"id": 3,
				"name": "Node 2",
				"pid": 1,
				"code": "N002",
				"children": [
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					},
					{
						"id": 5,
						"name": "Node 2.1",
						"pid": 3,
						"code": "N0021"
					}
				]
			}
		]
	}
]

2.算法实现

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TreeNode {

    private Long id;
    private String name;
    private Long pid;
    private String code;


    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<TreeNode> children = new ArrayList<>();


    public TreeNode(Long id, String name, Long pid, String code) {
        this.id = id;
        this.name = name;
        this.pid = pid;
        this.code = code;
    }
}

算法:service

    public List<TreeNode> getTree() {
        List<TreeNode> result = new ArrayList<>();
        // 查询数据
        List<TreeNode> allTreeNodes = treeNodeRepository.findAll();
        // 组装序列
        Map<Long,TreeNode> nodeMap = new HashMap<>();
        for (TreeNode node : allTreeNodes) {
            nodeMap.put(node.getId(), node);
        }
        // 遍历组装树
        for (TreeNode node : allTreeNodes) {
            if (node.getPid() == 0) {
                // 根节点
                result.add(node);
            } else {
                // 节点挂到父节点上
                TreeNode parantNode = nodeMap.get(node.getPid());
                if (parantNode != null) {
                    parantNode.getChildren().add(node);
                }
            }
        }
        return result;
    }


网站公告

今日签到

点亮在社区的每一天
去签到