algorithm - 从边缘构建树

标签 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

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

最佳答案

@mirt 感谢您指出我的方法的优化,您有更好的吗? 我将把下面的算法作为引用

最初构建一个 HashMap 来存储树中的元素:H,添加根(在您的情况下为空/或代表该根的任何内容)

采用 (_child, _parent)

  1. 循环遍历整个列表。 在列表中。 (每对都是元素)
  2. 对于每一对,查看 _child 和 _parent 是否存在于 HashMap H 中,如果没有找到,则为缺失的创建树节点并将它们添加到 H 中,并将它们与父子关系链接起来。
  3. 迭代结束时您将留下树。

复杂度为 O(n)。

关于algorithm - 从边缘构建树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11741825/

相关文章:

algorithm - 在网格上查找相邻 block

c++ - 寻找解决此动态编程问题的提示

opengl - 如何获得硬边 - OpenGL

python - 来自 networkx 的 MultiDiGraph 边使用 connectionStyle 绘制

algorithm - 图自动布局算法

c++ - 给定 3 个正整数,找到将它们减少到 0 的最大步数

javascript - 我在解决这个动态规划问题的方法中缺少什么? (Leetcode 740。删除并赚取)

javascript - 如何找到一个对象内多棵树的根

javascript - 如何将带有上下文菜单的展开所有按钮添加到 d3.js 树中

java - 具有递归的链表的链表