如何通过姓名来获得对应Person结点
时间: 2024-03-13 13:42:36 浏览: 16
要通过姓名来获得对应Person节点,可以在`Person`类中添加一个`name`字段,并提供一个`getName()`方法用于获取姓名。然后在`FamilyTree`类中提供一个`findPerson(String name)`方法,用于根据姓名查找对应的`Person`节点。
以下是一个示例代码:
```java
class Person {
private String name;
private List<Person> children;
public Person(String name) {
this.name = name;
this.children = new ArrayList<>();
}
public String getName() {
return name;
}
public void addChild(Person child) {
this.children.add(child);
}
public List<Person> getChildren() {
return children;
}
}
public class FamilyTree {
private Person root;
public FamilyTree(String name) {
this.root = new Person(name);
}
public Person getRoot() {
return root;
}
public void addPerson(Person parent, Person child) {
parent.addChild(child);
}
public Person findPerson(String name) {
return findPerson(root, name);
}
private Person findPerson(Person node, String name) {
if (node.getName().equals(name)) {
return node;
}
for (Person child : node.getChildren()) {
Person result = findPerson(child, name);
if (result != null) {
return result;
}
}
return null;
}
public static void main(String[] args) {
FamilyTree familyTree = new FamilyTree("张三");
Person parent1 = familyTree.getRoot();
Person child1 = new Person("李四");
familyTree.addPerson(parent1, child1);
Person parent2 = child1;
Person child2 = new Person("王五");
familyTree.addPerson(parent2, child2);
Person person = familyTree.findPerson("王五");
if (person != null) {
System.out.println(person.getName());
} else {
System.out.println("未找到对应的人物");
}
}
}
```
在上面的示例中,`findPerson(String name)`方法使用递归的方式在多叉树中查找对应姓名的节点。首先判断当前节点的姓名是否匹配,如果匹配则返回当前节点,否则递归查找子节点。如果所有子节点都没有找到对应的节点,则返回`null`。在`main`方法中,先创建家谱的起始人物张三,然后添加李四作为其子女,再添加王五作为李四的子女。最后,通过调用`findPerson("王五")`方法来查找王五对应的`Person`节点,并输出其姓名。