项目开发-树形层级结构中的数量统计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目开发-树形层级结构中的数量统计相关的知识,希望对你有一定的参考价值。

        项目开发中。有一 菜单的树形结构展示时,须要统计各个菜单下记录的总数。通常假设树形结构的深度为2(仅仅有两级菜单的话),使用for循环统计没有问题。可是假设树形菜单的深度没有限制,就不能通过两次for循环来实现统计了,仅仅能借助递归来统计了,使用一个全局map记录每次统计的值。简单实现例如以下:

       具有层级结构的元素Source类,省略getter/setter:

public class Source {
	private Source parent;
	private String id;
	private String name;
	private List<Source> children;
}
      统计方法。仅仅须要层级结构的根元素,就可以完毕各个菜单子元素的统计:

import java.util.List;
import java.util.Map;

public class SourceCountUtil {
	/**
	 * 树形结构展示的某个节点的统计数值=孩子总数+孩子的孩子总数
	 * @param root
	 * @param result
	 * @return
	 */
	public static int doCount(Source root,Map<String,Object> result){
		int count = 0;
		List<Source> list = root.getChildren();
		if(list==null ||list.size()==0){
			return count;
		}
	
		for (Source child : list) {
			//统计当前元素的子节点个数
			count++;
			
			//统计子节点的孩子总数
			int cur_cnt=doCount( child,result);
			result.put(String.valueOf(child.getId()), cur_cnt);
			
			count += cur_cnt;
		}
		
		//返回前记录当前节点的统计个数
		result.put(String.valueOf(root.getId()), count);
		return count;
	}

}
        每次利用递归统计完一个菜单的子节点个数后,存入map中。最后输出的result存储了全部菜单的子元素的个数。

dtree.js实现页面菜单展示也是通过递归完毕的。结合上述统计,能够得到例如以下的菜单统计效果:

技术分享


以上是关于项目开发-树形层级结构中的数量统计的主要内容,如果未能解决你的问题,请参考以下文章

Android 打造随意层级树形控件 考验你的数据结构和设计

js中实现无限层级的树形结构(类似递归)

js中将有层级关系的一维数据转换为父子级关系的二维数据菜单权限三级层级数据实现(树形结构数据)

js中将有层级关系的一维数据转换为父子级关系的二维数据菜单权限三级层级数据实现(树形结构数据)

线性结构转树形结构(生成无限层级菜单)

django-树形结构