怎么用java的树知识实现用输入人名查询人名的双亲和子孙
时间: 2024-03-14 08:43:54 浏览: 22
可以使用Java中的树数据结构来实现用输入人名查询人名的双亲和子孙。以下是一种基本实现方式:
1. 定义Person类,包括姓名、性别、出生日期、死亡日期等信息。
```java
class Person {
String name;
String gender;
Date birth;
Date death;
List<Person> children;
Person father;
Person mother;
// 构造函数、getter和setter方法等
}
```
2. 定义FamilyTree类,用于构建家族树。家族树的根节点为最早的祖先,每个人物节点包含其父母节点和子女节点。
```java
class FamilyTree {
Map<String, Person> nameToPersonMap; // 用于快速查找Person对象
Person root; // 家族树的根节点
// 构造函数、初始化方法等
// 添加新成员到家族树中
public void addMember(Person person) {
nameToPersonMap.put(person.name, person);
if (person.father != null) {
person.father.children.add(person);
}
if (person.mother != null) {
person.mother.children.add(person);
}
}
// 根据姓名查找Person对象
public Person findPersonByName(String name) {
return nameToPersonMap.get(name);
}
// 查找某个人的双亲
public List<Person> findParents(String name) {
List<Person> parents = new ArrayList<>();
Person person = findPersonByName(name);
if (person != null) {
if (person.father != null) {
parents.add(person.father);
}
if (person.mother != null) {
parents.add(person.mother);
}
}
return parents;
}
// 查找某个人的子孙
public List<Person> findDescendants(String name) {
List<Person> descendants = new ArrayList<>();
Person person = findPersonByName(name);
if (person != null) {
Queue<Person> queue = new LinkedList<>();
queue.offer(person);
while (!queue.isEmpty()) {
Person p = queue.poll();
descendants.add(p);
for (Person child : p.children) {
queue.offer(child);
}
}
}
return descendants;
}
}
```
3. 使用FamilyTree类构建家族树,并调用它的方法查找双亲和子孙。
```java
FamilyTree tree = new FamilyTree();
// 添加成员到家族树中,构建家族树
...
// 查找某个人的双亲
List<Person> parents = tree.findParents("张三");
// 查找某个人的子孙
List<Person> descendants = tree.findDescendants("张三");
```
以上是一种简单的实现方式,还可以根据需求进行优化和扩展。例如,可以添加树的遍历方法、支持多种查询方式等。