Java实现树结构以及计算各个节点数的和

  1. DeptPO

@Data
public class DeptPO {
    private Long id;
    private String name;
    private Long parentId;
    private Integer nums;
}
  1. DeptTree

@Data
public class DeptTree {
    private Long id;
    private String name;
    private Integer nums;
    private List<DeptTree> childList;
}
  1. Test

   public static List<DeptTree> buildTree(List<DeptPO> deptList) {
        List<DeptTree> result = new ArrayList<>();
        for (DeptPO dept : deptList) {
            if (dept.getParentId().equals(0L)) {
                result.add(recursiveChild(dept, deptList));
            }
        }
        return result;
    }

    public static DeptTree recursiveChild(DeptPO dept, List<DeptPO> deptList) {
        DeptTree deptTree = new DeptTree();
        deptTree.setId(dept.getId());
        deptTree.setName(dept.getName());
        deptTree.setNums(0);
        for (DeptPO son : deptList) {
            if (deptTree.getId().equals(son.getParentId())) {
                if (deptTree.getChildList() == null) {
                    deptTree.setChildList(new ArrayList<>());
                }
                deptTree.getChildList().add(recursiveChild(son, deptList));
            }
        }
        if (deptTree.getChildList() != null) {
            deptTree.setNums(getChildNumsTotal(deptTree.getChildList()) + dept.getNums());
        } else {
            deptTree.setNums(dept.getNums());
        }
        return deptTree;
    }

    public static int getChildNumsTotal(List<DeptTree> childList) {
        int childNumsTotal = 0;
        for (DeptTree deptTree : childList) {
            childNumsTotal += deptTree.getNums();
        }
        return childNumsTotal;
    }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以用Java实现递归计算树结构当前节点包含多少级,代码如下: ```java public int getLevel(TreeNode node) { if (node == null || node.children.isEmpty()) { return 0; } else { int maxChildLevel = 0; for (TreeNode child : node.children) { int childLevel = getLevel(child); if (childLevel > maxChildLevel) { maxChildLevel = childLevel; } } return maxChildLevel + 1; } } ``` 其中,`TreeNode` 表示树节点,`node.children` 表示当前节点的子节点列表。该函的返回值为当前节点包含的最大级加 1。 示例用法: ```java // 构造一颗树 TreeNode root = new TreeNode("A"); TreeNode b = new TreeNode("B"); TreeNode c = new TreeNode("C"); TreeNode d = new TreeNode("D"); TreeNode e = new TreeNode("E"); TreeNode f = new TreeNode("F"); TreeNode g = new TreeNode("G"); TreeNode h = new TreeNode("H"); root.addChild(b); root.addChild(c); b.addChild(d); b.addChild(e); c.addChild(f); c.addChild(g); e.addChild(h); // 计算节点 int levelA = getLevel(root); int levelB = getLevel(b); int levelC = getLevel(c); int levelD = getLevel(d); int levelE = getLevel(e); int levelF = getLevel(f); int levelG = getLevel(g); int levelH = getLevel(h); // 输出结果 System.out.println("Level of A: " + levelA); // Output: 2 System.out.println("Level of B: " + levelB); // Output: 1 System.out.println("Level of C: " + levelC); // Output: 1 System.out.println("Level of D: " + levelD); // Output: 0 System.out.println("Level of E: " + levelE); // Output: 1 System.out.println("Level of F: " + levelF); // Output: 0 System.out.println("Level of G: " + levelG); // Output: 0 System.out.println("Level of H: " + levelH); // Output: 0 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ronshi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值