那么假设我有一个相互相关的人员列表,每个人都包含自己的家谱。
public class Person {
private int id;
private String name;
private List<Integer> ancestorIds;
private int parentId;
//getters and setters
}
那么假设我有如下列表:
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(3,"grandpa", {}, null));
persons.add(new Person(4,"pa", {3,4},3));
persons.add(new Person(5,"uncle", {3,5},3));
persons.add(new Person(7,"me", {3,4,7},4));
但是现在我们知道我的爷爷他的父亲实际上是id 1..我需要更新列表…我怎么能做到这一点,记住我需要逐行更新它。首先我爷爷…然后把他的祖先名单给我爸爸和叔叔(也加上他们的id)。然后我把我爸爸的名单加上我。我想我需要一些递归方法来解决这个问题。
Thanks in advance
如果您对这个数据结构进行更改,如果您让每个人只指向它的直接祖先,则会更灵活。然后根据需要构建树。如果树不被改变,我将使用你在问题中提到的方式。
您是否被迫使用这种表示?让家谱树引用Persons更有意义,特别是将Person类定义为:
public class Person {
private int id;
private String name;
private List<Person> ancestors;
private int parentId;
//getters and setters
}
如果这样做,你不需要更新任何东西,除了你的曾祖父。事实上,逐行执行并不是一个可靠的解决方案,因为存在出错的可能性(如果您遗漏了单个ID),为了实现良好的设计,您应该避免这种情况。更糟糕的是,除非你保留反向指针(即既有祖先也有后代),否则没有有效的方法来更新树中的祖先。