发表于: 2017-09-25 23:31:56

1 774


今日完成:

写前台方案设计

后台方案评审

搭开发环境


明日计划:

开始写职员模块、部门模块


问题:

后台部门列表查询 

先从数据库中取出所有部门,新建一个结构体Node节点,Node包含几个属性,部门名称,部门id,List<Node>.
把取出的所有部门进行递归,判断其是否是父节点,如果是父节点,将其子节点取出,继续递归子节点的子节点,

如果不是父节点,则将其加入到列表中。 由此可以将所有部门取出,并按部门级别分类排序好发给前端。

使用这种方法,一级两级的分类还可以,如果子类超过3个查询起来就很耗性能了。


网上找了另外一种方法:预排序遍历树算法

这种方法不使用递归查询

数据库结构:
采用左右值编码的保存该树的数据记录如下(设表名为tree):
c_id | name | left_node | right_node
1     |商品    |      1       |   18
2     | 食品  |       2      |  11
3     | 肉类  |     3         |  6
4     | 猪肉    |    4        |    5
5     | 菜类  |     7        |   10
6     | 白菜  |    8         |    9
7     | 电器  |    2         |    17
8     | 电视  |    13       |    14
9     | 电棒  |    15       |     16

第一次看见上面的数据记录,相信大部分人都不清楚左值(left_node)和右值(right_node)是根据什么规则计算出来的,而且,这种表设计似乎没有保存父节点的信息。下面把左右值和树结合起来,请看:
          1商品18
     +---------------------------------------+

        2食品11                                12电器17

+-----------------+               +---------------------+
3肉类6           7菜类10       13电视14              15电棒16
4猪肉5            8白菜9
请用手指指着上图中的数字,从1数到18,学习过数据结构的朋友肯定会发现什么吧?对,你手指移动的顺序就是对这棵树的进行先序遍历的顺序。接下来,让我讲述一下如何利用节点的左右值,得到该节点的父节点,子孙节点数量,及自己在树中的层数。

采用左右值编码的设计方案,在进行类别树的遍历时,由于只需进行2次查询,消除了递归,再加上查询条件都为数字比较,效率极高,类别树的记录条目越多,执行效率越高


还没看明白,明天接着研究下


进度:

还有3天后台要demo


返回列表 返回列表
评论

    分享到