1

我有一个 Person 的对象结构,如下所示,我想根据他的名字搜索一个 Person。

public Person{

   String name;

   List<Person> person;

}

我们如何为此实现搜索方法?

将有一个根对象,即 Person,它与其他人有链接,依此类推。

Person 的名称是唯一的。

搜索签名可以是

public Person findPerson(Person root, String name){

}

我可以将其视为thisthis

任何人都可以为此提出任何其他解决方案吗?

4

3 回答 3

5

您将需要递归。遍历列表中的所有人员并在该人员中搜索相同的目标。找到目标后,返回并停止所有搜索。

这是一些伪代码:

Person search(Person, Name)
    if (Person.Name == Name) return Person;
    for each subPerson in Person.person:
        Person found = subPerson.search(Person, Name);
        if (found != null) return found;
    return null;
于 2013-10-17T05:45:14.137 回答
2

您将需要访问每个人,每个人持有的每个人,这很容易使用递归算法实现,因此深度优先。

需要考虑的一件事:你知道名字是独一无二的吗?如果不是,您将需要返回匹配人员的列表,如果您想对名称进行模式匹配,这可能是合适的:所有姓氏为“Smith”的人

于 2013-10-17T05:45:25.340 回答
0

你可以使用反射。在运行时检查 Person 的实例是否具有 Person 类型的变量,然后调用它的 getter。递归执行以最小化和优化代码。

于 2013-10-17T05:48:25.527 回答