首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图论--寻找子图

图论--寻找子图
EN

Stack Overflow用户
提问于 2012-10-24 07:39:12
回答 1查看 789关注 0票数 1

我正在编写一个程序,它接受一些名称的输入,并查看以下结构的树:

代码语言:javascript
复制
                                                        John
                                                    /           \
                                                  Chris         Bob
                                                /   |   \        |  \
                                               Tom Ben  Anna    Jade  Ed
                                               /  \      |           /  \
                                            Will  Mark  Ant        Andy  Dan

程序应该返回根节点是输入名称之间最低关系/链接的子树。

如果我输入Mark和Ant,程序应该返回以下树:

代码语言:javascript
复制
                                                  Chris 
                                                /       \   
                                               Tom     Anna     
                                                  \      |         
                                                  Mark  Ant 

如果我输入Will,Mark和Andy,那么程序应该返回下面的树:

代码语言:javascript
复制
                                                        John
                                                    /           \
                                                  Chris         Bob
                                                /                   \
                                               Tom                   Ed
                                               /  \                  /  
                                            Will  Mark             Andy  

我为我的树节点和连接性使用了以下类:

代码语言:javascript
复制
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数据库,但我想先在本例中解决这个问题。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 07:44:25

您正在寻找的是最底层的公共祖先:

http://en.wikipedia.org/wiki/Lowest_common_ancestor

我可以尝试详细地解释它,但我永远不会比本教程做得更好、更全面,它教会了你许多不同的算法来解决这个问题:

http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAncestor

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13040934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档