Algorithm 从边缘构建树
我有棱角,我想用它建一棵树 问题是,只有当边按特定顺序排列时,我才能构造树结构。 订单示例:Algorithm 从边缘构建树,algorithm,tree,edges,construct,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 因此,对于新添加的顶点,树中必须始终存在父节点。 问题是如何对输入边进行排
(vertex, parent_vertex)
good: bad:
(0, ) <-top (3, 2)
(1, 0) (1, 0)
(2, 1) (3, 2)
(3, 2) (0, ) <-top
因此,对于新添加的顶点,树中必须始终存在父节点。
问题是如何对输入边进行排序。Voices告诉我拓扑排序,但它是针对顶点的。有可能把它分类正确吗?@mirt谢谢你指出我的方法的优化,你有更好的吗? 我将把下面的算法作为参考 首先构造一个散列映射来存储树中的元素:H,添加根(在您的例子中为null/或表示该根的任何内容) 获取配对(\u子项,\u父项)
复杂性是O(n) 拓扑排序有什么问题?如果你对顶点排序,你的列表将是正确的。如果你有边,你就有树。你似乎唯一缺少的是关于哪个顶点是根的知识。一旦找到根(选择任意边并开始跟随父对象),我认为您要查找的是对树的一次预排序遍历。@Beta,是的,它似乎工作得很简单,我这样做了:将所有对放入哈希映射H中,并对其进行迭代。所以对于每一对(C,P),我在H中找到C和P并将它们绑定(将P设置为C的父项,将C添加为P的子项)。所以需要O(N)。
result tree:
0 - 1 - 2 - 3