【发布时间】:2013-06-30 09:53:57
【问题描述】:
我必须维护公司的员工结构。每个员工都有一个唯一的名称(没有两个同名)和一个级别(整数)。级别表示人员在层次结构中的位置。级别 1 = 最高(级别 1 只能有 1 名员工,但级别 i > 1 可以有多名员工)。每个级别 i 的员工都在级别 i-1 的员工下工作,该员工是他/她的直接上司。现在,给定任何员工说 A,有员工 A',A''... 这样 A 在 A' 下工作,A' 在 A'' 下工作,依此类推。我需要创建一个合适的树形结构。
我需要实现以下方法:
addEmployee(new, boss) - new 将立即在 boss 下工作
delEmployee(e1, e2) - e1 将被删除,e1 下的所有员工现在都将在 e2 下工作。 (注意 - e1 和 e2 处于同一级别)
lowestCommonBoss(e1, e2) - 不言自明
printEmployees() - 按级别打印所有员工的姓名
现在我要做的是创建一个节点类:
public class Node {
String element;
Node parent;
protected ArrayList<Node> children;
protected int level;
Node(String e) {
this.element = e;
this.parent = null;
this.children = new Arraylist();
this.level = 1;
}
}
现在,我应该遵循什么样的树结构?这是我要找的节点吗?
【问题讨论】:
-
似乎符合您的要求,除了构造函数。使您的构造函数通用:考虑除根以外的其他情况。元素是您要保留的唯一信息吗?
-
您的问题太笼统,没有说明您是否使用数据库。如果是这样,如果您需要生成统计信息或使用其他功能。请说明。
-
@VaibhavRaj 是的,我想是的。我需要的只是员工的姓名作为字符串。
-
@surfealokesea 不,我没有使用数据库或任何类似的东西。添加员工将在 main() 方法本身中完成。
-
@Saket:使用 Set
children 而不是 ArrayList children 并覆盖 Node 类的 equals 和 hashCode 方法,因为您的要求表明每个员工都是独一无二的。我认为您正在考虑属性元素的唯一性。
标签: java data-structures avl-tree