现代化WEB项目中少不了要用到报表展现.对于中国式报表来说,复杂表头是必不要可少的一种表现形式。
形如下面的表格:
合并四 |
合并三 |
合并二 |
合并一 |
单元三 |
单元一 |
单元二 |
单元四 |
单元五 |
如何通过数据库表示这样一个复杂表头呢?其实他就是一个多叉树.在数据库里表达出一棵树信息
很简单吧.再者就是展现到页面时每一个树结点的Colspan,Rowspan怎么计算呢.Colspan比较简
单就是树的宽度.说白了就是叶结点的个数(因为叶结点的宽度都是1).Rowspan似乎不容易获得.
仔细看的话,你会发现当前结点Rowspan就是父结点为根的子树深度减去自身为根的子树的深度.
这样问题就解决了.
多叉树求树深的算法:
Code
public static int getTreeDepth(TreeNode root) {
if (root == null) {
return 0;
}
Iterator<TreeNode> it = root.getChildList().iterator();
List<Integer> depths = new ArrayList<Integer>();
while (it.hasNext()) {
TreeNode node = it.next();
depths.add(getTreeDepth(node));
}
Collections.sort(depths);
if (depths.isEmpty()) {
return 1;
} else {
return depths.get(depths.size() - 1) + 1;
}
}