所以,让我们说我有一个彼此相关的人员名单,每个人都包含他们自己的家谱。
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的那个..我需要更新清单..我怎么能这样做,记住我需要按行更新..所以首先我的爷爷..然后拿走他的祖先名单并把它交给我的父亲和叔叔(也加上他们的ids)。然后我把我的pa列表加入我。我想我需要一些递归方法。
提前致谢
答案 0 :(得分:0)
如果您对此数据结构进行更改,如果您让每个人仅指向它的直接祖先,那么它将更灵活。然后按需构建树。 你在问题中提到的方式,如果树没有改变,我会用。
答案 1 :(得分:0)
您是否被迫使用此表示法?家族树更有意义引用人,特别是Person类被定义为:
public class Person {
private int id;
private String name;
private List<Person> ancestors;
private int parentId;
//getters and setters
}
如果以这种方式完成,除了你的曾祖父外,你不需要更新任何东西。实际上,逐行执行并不是一个强大的解决方案,因为存在错误的空间(如果您错过了一个ID),并且您应该避免这种情况,以获得良好的设计。更糟糕的是,除非你保留背景(即有后代和祖先),否则没有有效的方法来更新树下的祖先。