树遍历统计总数

{
    platformId: 3,
    areaId: "<ROOT>",
    areaName: "ROOT",
    parentAreaId: "",
    online: 0,
    offline: 0,
    total: 0,
    sum: 0,
    sumOnline: 0,
    sumOffline: 0,
    children: [{
        platformId: 3,
        areaId: "000",
        areaName: "测试",
        parentAreaId: "<ROOT>",
        online: 2,
        offline: 1,
        total: 3,
        sum: 0,
        sumOnline: 0,
        sumOffline: 0,
        children: [{
            platformId: 3,
            areaId: "000002",
            areaName: "测试2",
            parentAreaId: "000",
            online: 0,
            offline: 0,
            total: 0,
            sum: 0,
            sumOnline: 0,
            sumOffline: 0,
            children: []
        },
        {
            platformId: 3,
            areaId: "000001",
            areaName: "测试1",
            parentAreaId: "000",
            online: 30,
            offline: 0,
            total: 30,
            sum: 0,
            sumOnline: 0,
            sumOffline: 0,
            children: []
        },
        {
            platformId: 3,
            areaId: "000000",
            areaName: "测试0",
            parentAreaId: "000",
            online: 274,
            offline: 10,
            total: 284,
            sum: 0,
            sumOnline: 0,
            sumOffline: 0,
            children: []
        }
        ]
    }]
}

这种树结构的数据怎么遍历统计,每个结点的sum要是下级节点total的总和及本节点total的总和,每个节点的sumoffline要是下级节点及本节点offline的总和

 private AreaCameraStatusSum  count(AreaCameraStatusSum root){

        int total = root.getTotal();
        int offline = root.getOffline();

        if(root.getChildren().size() < 1){
            root.setSum(total);
            root.setSumOffline(offline);
            return root;
        }
        int sum = total;
        int sumOffline = offline;
       for(AreaCameraStatusSum child : root.getChildren()){
           AreaCameraStatusSum tmp = count(child);
           sum += tmp.getSum();
           sumOffline += tmp.getSumOffline();

       }
        root.setSum(sum);
        root.setSumOffline(sumOffline);

        return root;

    }

上面用递归的方法可以求出每个节点的和,不知道有没有更好的方法

阅读 4.5k
1 个回答

你都说了是树形结构, 直接建一棵树进行后序遍历不就可以了....

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题