【问题标题】:How to build a tree from a list of nodes' parents?如何从节点的父母列表中构建一棵树?
【发布时间】:2014-05-24 11:12:32
【问题描述】:

我知道每个节点的父节点。它存储在一个平面unordered_map 中。每个节点只是一个数字,其中零表示根。如何根据这些信息有效地创建树?

struct node {
    int id;
    unordered_set<node> children;
};

可能会出现某些节点根本没有连接到根的情况。那些分离的链可以被忽略,不需要成为结果树的一部分。

如果需要,请询问更多信息。

【问题讨论】:

    标签: c++ algorithm tree hierarchy


    【解决方案1】:

    创建一个节点指针数组。

    然后遍历映射,将数组中给定索引处的节点添加到其父数组中索引处的节点的children

    那么索引0处的节点将是树的根。

    【讨论】:

    • "那么索引 0 处的节点将是树的根。"为什么会这样?毫无疑问,没有父节点(或自身为父节点)的节点是根节点。
    • 使用指针很好。根已经由 id 零给出。
    • @G.Bach 好吧,从问题陈述来看,0 似乎是根(并且有分离的链,所以简单地寻找没有父链的链是行不通的)。
    • 我认为在这里使用积分确实可以解决问题。但是,我更喜欢使用 unordered_set 而不是数组。你怎么看?
    • @danijar 这也应该可以。如果您提前知道大小并且要创建所有节点,则可能首选数组,因为unordered_set 有相当多的时间和空间开销。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多