从边缘构建树

时间:2012-07-31 13:57:28

标签: algorithm tree edges construct

我有边缘,我想用它构建一个树。

问题是我只能在边缘按特定顺序构建树结构时才能构造树形结构。  订单示例:

(vertex, parent_vertex)

good:              bad:
(0,  ) <-top       (3, 2)
(1, 0)             (1, 0)
(2, 1)             (3, 2)
(3, 2)             (0,  ) <-top

我迭代抛出边缘并且当前顶点试图在创建的树中找到它的父节点,然后我构造节点并插入它。

result tree:

0 - 1 - 2 - 3

因此,树中始终必须存在新添加顶点的父级。 问题是如何对输入边进行排序。声音告诉我拓扑排序,但它是顶点。是否可以对其进行排序?

1 个答案:

答案 0 :(得分:2)

@mirt感谢你指出我的方法的优化,你有更好的吗? 我将把以下的算法用于参考

最初构造一个哈希映射来存储树中的元素:H,添加根(在您的情况下为null /或表示该根的任何内容)

取对(_child,_ parent)

  1. 遍历整个列表。 在列表中。 (每一对都是元素)
  2. 对于每一对,查看哈希映射H中是否存在_child和_parent,如果找不到,则为缺失的树创建树节点并将它们添加到H,并将它们与父子关系链接。 / LI>
  3. 你将在迭代结束时留下树。
  4. 复杂度是O(n)。