Algorithm 如何从列表构建多路树

Algorithm 如何从列表构建多路树,algorithm,tree,multiway-tree,Algorithm,Tree,Multiway Tree,我必须通过合并多个列表来构建一个多路树。我正试图找到一个有效的算法来做到这一点 可以有相同的列表 列表元素不是唯一的。这些元素的路径是 树以空根元素开始 列表包含非唯一的元素。每个元素的路径都是一个键 例如,使用列表: A-B-C-D-E A-B-C-B F-B-C-C A-E-F A-C-D A-B-C-D-E 可以构建以下树: 我实现的第一个算法通过创建根节点并逐个向其中添加列表来构建树: 创建根节点 选择第一个列表 如果列表的第一个元素已经是根节点的子元素,请选择它。否则,将该元

我必须通过合并多个列表来构建一个多路树。我正试图找到一个有效的算法来做到这一点

  • 可以有相同的列表
  • 列表元素不是唯一的。这些元素的路径是
  • 树以空根元素开始
列表包含非唯一的元素。每个元素的路径都是一个键

例如,使用列表:

  • A-B-C-D-E
  • A-B-C-B
  • F-B-C-C
  • A-E-F
  • A-C-D
  • A-B-C-D-E
可以构建以下树:

我实现的第一个算法通过创建根节点并逐个向其中添加列表来构建树:

  • 创建根节点
  • 选择第一个列表
  • 如果列表的第一个元素已经是根节点的子元素,请选择它。否则,将该元素作为子元素插入
  • 如果列表的下一个元素已经是以前选择或插入的子元素的子元素,请选择它。否则,将该元素作为子元素插入
  • 重复步骤4,直到列表为空
  • 选择下一个阵列并转至步骤3。如果没有其他列表,请停止

  • 我找到的大多数构建或合并树的资源都是指二叉树。因此,我想知道在我的例子中是否有更好的算法来构建多路树

    快速浏览后,您的算法看起来是正确的,但我会更改术语。我不会说“列表中的第一个元素”,而是使用
    标题
    。不要说列表的下一个元素
    ,你应该考虑传递一个新的列表,去掉标题,然后使用新的
    标题
    。这样,您总是在处理列表的标题。不要说
    直到列表为空
    而是思考
    直到头部为空
    。如果你知道输入列表总是固定的,那么你可以使用一个更快速的完美散列,但你在问题中没有这样做。太好了,谢谢你的帮助!快速浏览后,您的算法看起来是正确的,但我会更改术语。我不会说“列表中的第一个元素”,而是使用
    标题
    。不要说列表的下一个元素
    ,你应该考虑传递一个新的列表,去掉标题,然后使用新的
    标题
    。这样,您总是在处理列表的标题。不要说
    直到列表为空
    而是思考
    直到头部为空
    。如果你知道输入列表总是固定的,那么你可以使用一个更快速的完美散列,但你在问题中没有这样做。太好了,谢谢你的帮助!