我正在编写一个程序,它接受一些名称输入并查看以下结构的树:
John
/ \
Chris Bob
/ | \ | \
Tom Ben Anna Jade Ed
/ \ | / \
Will Mark Ant Andy Dan
程序应该返回子节点,其中根节点是输入名称之间的最低关系/链接。
如果我输入Mark和Ant,程序应返回以下树:
Chris
/ \
Tom Anna
\ |
Mark Ant
如果我输入Will,Mark和Andy,程序应返回以下树:
John
/ \
Chris Bob
/ \
Tom Ed
/ \ /
Will Mark Andy
我正在为树节点和连接使用以下类:
import java.util.ArrayList;
import java.util.List;
public class Person {
private String name;
private List<Person> children;
public Person(String name) {
this.name = name;
children = new ArrayList<Person>();
}
public String getName() {
return name;
}
public List<Person> getChildren() {
return children;
}
public void setName(String name) {
this.name = name;
}
public void setChildren(List<Person> children) {
this.children = children;
}
public void addChild(Person c) {
children.add(c);
}
}
我的问题是如何解决确定公共节点的问题(在第一个例子中它是Chris,第二个是它的John)以及如何使用该名称来获取子树(下面的公共节点和节点)
我也在考虑扩展这个以使用Neo4j数据库,但我想先在这种情况下解决这个问题。
谢谢!
答案 0 :(得分:1)
您正在寻找的是共同的最低祖先:
http://en.wikipedia.org/wiki/Lowest_common_ancestor
我可以尝试详细解释它,但我永远不会比本教程更好更全面地做到这一点,本教程教你一些不同的算法来解决这个问题:
http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAncestor