从边缘构造一棵树

时间:2013-02-20 02:30:20

标签: java algorithm graph tree

如果我试图构造一个给定输入的树,每条线有一条边,其中边是由它连接的两个顶点表示的。是否可以使用Node结构/类构造树,或者我应该将其表示为邻接列表,就像我将图表一样?

我遇到的主要问题是输入的顺序。如果我给出了两个或多个最初没有连接的边,那么我有一堆没有连接的Node对象,而通常你给了一棵树并插入一棵树就是新节点是另一个节点的子节点(或父节点?)。

2 个答案:

答案 0 :(得分:0)

如果您担心如何存储多个节点而不是一个根节点,则一种方法是使用N个指向Node的数组。假设每个节点的索引为0到N-1,其中N是树中节点的数量,您可以将第i个节点指针存储在数组的第i个元素中。

如果不使用指针,这种方法更有利,您将在堆栈中一次分配N个节点的数组(在C / C ++中)。这是内存分配时间的巨大改进。

答案 1 :(得分:0)

您是否考虑过利用图形数据库技术(如neo4j)存储节点和边缘?它是可嵌入的。

我已经在scala上广泛使用嵌入式orientdb和tinkerpop蓝图来绘制算法。我建议你查看这些技术,因为它们会使这些问题和图算法构造变得微不足道。

属性图dbs使用索引来允许查找类型,以便您可以找到一个节点并从那里开始遍历图形。无需重新发明轮子。

主要概念是:节点,边缘,属性(可以存在于节点或边缘上。边缘类型(例如,在社交图中'知道')。确定边缘的遍历方向。所提到的索引“键入”节点并允许查找。

可以查询每个节点的入边或出边,并且可以检查边缘类型和属性。