将平面列表转换为每个深度具有有限节点数的树

时间:2011-07-22 16:54:18

标签: java algorithm tree

我正在搜索以下任务的解决方案:

我有一个包含大量数据的平面列表。

现在我想将此列表转换为具有以下规则的树:

  • 我的所有listitems应该是leafs
  • 每个树深度的节点数应限制在一定限度
  • 节点可以无限深度嵌套

我认为它就像一个k-ary(k是每个级别的节点限制)树,但也许这个东西有另一个名字。

此任务的背景是径向树中列表的可视化问题。当有太多时,在径向树中显示第一层上的所有叶子看起来不太好。因此,我认为最好在达到级别限制时插入一些节点来对数据进行分组。生成的树应该能够以更好的视觉方式显示叶子。

是否有算法或更好的实现此任务?

感谢任何指针或信息。

1 个答案:

答案 0 :(得分:4)

我们说N,列表中的项目数为4,K=2。所以这将是一棵二叉树。

第1步:创建2个节点

  P1        P2

1    2    3    4

步骤2:在叶节点的2个节点和K之间创建链接

  P1        P2
 /  \      /  \
1    2    3    4

第3步:创建另一个节点

       P5

  P1        P2
 /  \      /  \
1    2    3    4

步骤4:在该节点与您创建的2个先前节点之间创建链接

       P5
    /      \
  P1        P2
 /  \      /  \
1    2    3    4

看模式?对于任何此类NK,您可以非常轻松地迭代执行此操作。你必须担心N不是K的完美力量的情况。基本上每个节点的子节点数最多为ceil(N / K)。