树的汇总

继上次浅谈了树的遍历之后,这次再浅谈一下树的汇总。此处的汇总是指将树中某节点的数据按指定 的汇集到它的父节点中。例如,可以将树节点中的数值累加到它的父节点中。仍如树的遍历一文,我将使 用两种简单的算法,递归与和迭代,来实现这一功能。(2009.06.26最后更新)

1. 树节点

仍然沿用树的遍历一文中的TreeNode/GenericTreeNode,为便于阅读,将GenericTreeNode中的若干关 键属性展示如下,

public class GenericTreeNode<T> implements TreeNode {

    private T userObject = null;

    private TreeNode parent = null;

    private List<GenericTreeNode<T>> children = new ArrayList<GenericTreeNode<T>>();

   
}

2. 递归法

仍然先从最简单的递归法开始,

public static Double recursiveGatherValue(GenericTreeNode<Double> node) {
    Double sumValue = null;
    if (node.isLeaf()) {
        return node.getUserObject();
    } else {
        sumValue = node.getUserObject ();
        List<GenericTreeNode<Double>> children = node.getChildren ();
        for (int i = 0, size = children.size(); i < size; i++) {
             Double bufGatherValue = recursiveGatherValue(children.get(i));
             sumValue += bufGatherValue;
        }
    }

    node.setUserObject(sumValue);
    return sumValue;
}

递归法还是一如既往的简单易懂。与递归遍历树相比,递归汇总树的程序基本上没大的变化,我就不 赘述了...

时间: 2024-08-07 01:44:55

树的汇总的相关文章

sql 树 汇总 子汇总父-sql 树状结构 向下汇总

问题描述 sql 树状结构 向下汇总 有结构:p_id m_id |num0 1 |81 2 |22 3 |1 3 4 |1需用语句快速实现:p_id m_id |num sum |0 1 |81 2 |2 82 3 |1 103 4 |1 11

php遍历树的常用方法汇总_php技巧

本文实例讲述了php遍历树的常用方法.分享给大家供大家参考.具体如下: 一.递归的深度优先的算法: <?php define('DS', DIRECTORY_SEPARATOR); function rec_list_files($from = '.') { if(!is_dir($from)) { return array(); } $files = array(); if($dh = opendir($from)) { while(false !== ($file = readdir($dh

实现PHP+Mysql无限分类的方法汇总

 这篇文章主要给大家汇总介绍了实现PHP+Mysql无限分类的2种方法,并对比分析了2种方法的优劣,需要的朋友可以参考下     无限分类是个老话题了,来看看PHP结合Mysql如何实现. 第一种方法 这种方法是很常见.很传统的一种,先看表结构 表:category id int 主键,自增 name varchar 分类名称 pid int 父类id,默认0 顶级分类的 pid 默认就是0了.当我们想取出某个分类的子分类树的时候,基本思路就是递归,当然,出于效率问题不建议每次递归都查询数据库,

DOM操作一些常用的属性汇总

 这篇文章主要介绍了DOM操作一些常用的属性汇总,总结的相当全面,附上示例,是篇非常不错的学习提高DOM操作的文章,推荐给大家.     1.DOM:文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 2.DOM的一些常用的属性 2.1 通过ID获取元素 (1)语法:   代码如下: document.getElementById("id");   (2)作用:id就

阿里巴巴开源技术汇总:115个软件(五)

很高兴又和广大读者相见了!今天是第五期阿里巴巴开源技术汇总.在前面四期中我们带领大家浏览了许多阿里的开源项目,相信现在读者们跟我一样对阿里的很多优秀的项目都耳熟能详了.在今天这一期的汇总中,我们又为读者呈现了20个精彩的开源项目,20个新的面孔,现在就和我们一起走近它们,领略它们的风采吧! 1.TimeTunnel [项目简介] TimeTunnel(简称TT)是一个基于thrift通讯框架搭建的实时数据传输平台,具有高性能.实时性.顺序性.高可靠性.高可用性.可扩展性等特点.目前TimeTun

人工智能之机器学习算法体系汇总

1.人工智能之机器学习体系汇总 2.人工智能相关趋势分析 2.1.人工智能再次登上历史舞台 2.2.Python才是王道 2.3.深度学习趋势大热 2.4.中国更爱深度学习 3.结语 参加完2017CCAI,听完各位专家的演讲后受益匪浅.立志写"人工智能之机器学习"系列,此为开篇,主要梳理了机器学习方法体系,人工智能相关趋势,Python与机器学习,以及结尾的一点感恩. Github开源机器学习系列文章及算法源码 1.人工智能之机器学习体系汇总 [直接上干货]此处梳理出面向人工智能的机

codeblocks 使用汇总

codeblocks 使用汇总 集成本帖提到的所有补丁,非官方,双编译器(VC9.MinGW4.4.3)绿色版,解压密码:csdn   >> http://portablecb.googlecode.com/files/LoveDEV.7z<< 由于集成VC9,所以请试用后24小时内删除! 官方公告:http://forums.codeblocks.org/index.php/topic,12156.0.html 这段时间比较忙,主要是学习Code::Blocks的代码,并且为其提

iOS开发资源汇总

如何用Facebook graphic api上传视频: http://developers.facebook.com/blog/post/532/ Keychain保存数据封装: https://github.com/carlbrown/PDKeychainBindingsController 对焦功能的实现: http://www.clingmarks.com/?p=612 自定义圆角Switch按件: https://github.com/domesticcatsoftware/DCRou

OEA 中 WPF 树型表格虚拟化设计方案

    最近用 OEA 做的仓库管理系统中,许多界面的都需要使用表格控件来显示数据.一是这些表格的列非常多,有的甚至达到了 200 列,而且一个模块的界面中可能同时显示好几个表格.这导致界面的速度比较慢,特别是较多数据需要展现时.经检测,表现虽然表格的行已经做了虚拟化,但是由于列非常多,最终还是造成可视树中的元素过多,而导致界面布局代码运行过慢.假设只有 30 行,一个单元格仅生成 5 个可视元素,200 列的单元格都会产生 3W 个可视元素,而布局系统的 Measure 方法需要对可视树中的每