根绝Perso类的描述,它是树结构,有双亲有孩子。方法里面应该传入一个节点,题目让你找出该节点所有姐姐和所有祖先。
找姐姐的话需要判断一下性别和年龄,其他就与普通树的查找是一样的了

解决方案 »

  1.   


    private String name;
    private int age;
    private char sex;
    private Person spouse;
    private Person mother;
    private Person father;
    private List<Person> children;

    public List<Person> getSisters() {
    List<Person> result = new ArrayList<Person>();
    List<Person> a = father.getChildren();//这边不考虑同父异母或同母异父
    for (Person c : a) {
    if ("女".equals(c.sex) && (!this.name.equals(c.name))) {
    result.add(c);
    }
    }
    return result;
    }

    public List<Person> getAncestors() {
    List<Person> result = new ArrayList<Person>();
    getTheFather(result, this);
    return result;
    }

    private void getTheFather(List<Person> list, Person son) {
    Person f = son.father;
    while(f != null) {
    getTheFather(list, f);
    }
    }
      

  2.   


    多谢ls的,找sister的方法我也同意。但是找祖先是递归吗?每一个人都有父有母,把家谱反着看好像也是binary tree吧,如果要祖先定义为父的父,父的母,母的父,母的母,是不是应该用tree traversal(遍历树)呢?
      

  3.   


    list of all older sisters
      

  4.   

    估计是想考递归吧,对父母这边进行递归查找所有的祖先,然后是利用父母的children链表来查找所有年龄比自身大的女性。不知道表姐堂姐算不算
      

  5.   


     Person f = son.father;看不懂,新人求问
      

  6.   

    除了楼上筒子们说的算法,还可以从设计模式角度阐发一下。
    这个类的设计用到了组合模式,查找则可以通过在组合对象上提供标准的迭代器接口,使得不暴露集合内部的实现,就能够顺序访问集合中的各个元素。
    这一部分可以看看《head first design patterns》组合与迭代器那一篇,里面的例子情境和这道题挺像。
    《head first design patterns》下载:
    http://download.csdn.net/download/shuchunsuper/4361346
      

  7.   

    我就想问什么不能用中文的描述,出java 的考题呢?