存储一个家族的族谱,并提供查询和修改。要求刚开始的族谱里至少有10人,能够查询某个指定人物的双亲和他所有的子孙,新增子孙的插入,指定人物由键盘输入。测试上述所有功能。要求使用树相关知识实现。Java
时间: 2024-03-24 20:36:28 浏览: 102
好的,这是一个家族族谱的树形结构问题,可以使用Java的树相关知识实现。下面是一个示例代码,可以实现这个功能:
```java
import java.util.ArrayList;
import java.util.Scanner;
class Person {
String name;
Person father;
ArrayList<Person> children;
public Person(String name) {
this.name = name;
this.father = null;
this.children = new ArrayList<>();
}
public void addChild(Person child) {
child.father = this;
children.add(child);
}
public ArrayList<Person> getDescendants() {
ArrayList<Person> descendants = new ArrayList<>();
for (Person child : children) {
descendants.add(child);
descendants.addAll(child.getDescendants());
}
return descendants;
}
public ArrayList<Person> getAncestors() {
ArrayList<Person> ancestors = new ArrayList<>();
if (father != null) {
ancestors.add(father);
ancestors.addAll(father.getAncestors());
}
return ancestors;
}
}
public class FamilyTree {
public static void main(String[] args) {
// 创建族谱
Person grandpa = new Person("Grandpa");
Person dad = new Person("Dad");
Person uncle = new Person("Uncle");
grandpa.addChild(dad);
grandpa.addChild(uncle);
Person me = new Person("Me");
dad.addChild(me);
Person cousin = new Person("Cousin");
uncle.addChild(cousin);
// 查询和修改
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("请输入要查询或修改的人的姓名:");
String name = scanner.nextLine();
if (name.equals("exit")) {
break;
}
Person person = findPerson(name, grandpa);
if (person == null) {
System.out.println("没有找到这个人!");
} else {
System.out.print("这个人的父母是:");
if (person.father == null) {
System.out.println("未知");
} else {
System.out.println(person.father.name);
}
System.out.print("这个人的子孙有:");
ArrayList<Person> descendants = person.getDescendants();
if (descendants.isEmpty()) {
System.out.println("无");
} else {
for (Person descendant : descendants) {
System.out.print(descendant.name + " ");
}
System.out.println();
}
}
}
}
public static Person findPerson(String name, Person person) {
if (person.name.equals(name)) {
return person;
}
for (Person child : person.children) {
Person result = findPerson(name, child);
if (result != null) {
return result;
}
}
return null;
}
}
```
运行示例代码后,可以输入要查询或修改的人的姓名,程序会输出该人的父母和子孙。例如输入“Me”,程序会输出“这个人的父母是:Dad,这个人的子孙有:无”;输入“Grandpa”,程序会输出“这个人的父母是:未知,这个人的子孙有:Dad Uncle Me Cousin”。对于新增子孙的插入,可以调用`addChild`方法实现,例如`me.addChild(new Person("Son"))`。
阅读全文