如何找到所有部门的最大的上级
class Department
{
private int id;
private String name;
//parent department
private Department parent;
}
每个部门都有其上级部门的引用
如果有多个部门是同级的,则共同上级为这些部门的parent部门
如果多个部门之间有隶属关系,则取这些部门中最大的部门
举例:有如下隶属关系
A
A1
B1
B2
B3
A2
B4
B5
C1
C2
B6
A3
B7
C3
D1
A4
A5
---------------
如果现在有部门:C1,C2,则共同最大的部门为:B5
如果现在有部门:B5,C1,C2,则共同最大的部门为:B5
如果现在有部门:B4,B5,C1,C2,则共同最大的部门为:A2
不用sql,如何用java实现
求思路
------解决方案--------------------可以更改一下数据格式么,每个级别有个编码,对比可以直接得到最大的级别
------解决方案--------------------
找到当前元素的 所有 父节点 ,放入数组(数组第0个元素就是当前元素本身,最后一个元素就是最顶级的 节点)
同理,可得到另外的其他几组 数字数据
例如 A1 = {1,3,5};
A2 = {2,4,5};
先假设有这两个吧,遍历A1(从最高位开始遍历),拿A1[2] 到A2 数组中寻找有没有A1[2] 元素,如果有,则继续遍历,用A1[1]在A2中寻找有没有,没有,则说明 A1[1]就是你要找的元素
------解决方案--------------------我觉得,更改下部门编码好点。。
比如第一个大部门100 下属部门10001(下属部门1000101、1000102……)、10002(下属部门1000201……)、10003 (下属部门1000301……)
第二个大部门200 下属部门20001(下属部门2000101、2000102……)、20002(下属部门2000201……)、10003 (下属部门2000301……)
在生成编码时,自动++便可。。
------解决方案--------------------递归调用祖先进行对比可以实现吧?
------解决方案--------------------
按照你的例子:
如果现在有部门:C1,D1,则共同最大的部门为:
C1 :C1 B5 A2 A ( C1以及C1的所有父级节点 ,最顶级的节点在最后面)
D1 :D1 C3 B7 A3 A ( D1 以及D1 的所有父级节点 ,最顶级的节点在最后面)
很明显,A就是你要的结果,
需要用循环实现,3个或以上的就多层循环而已
这样应该明白了吧