在叶子上有重复条目的树

时间:2013-06-07 22:49:09

标签: c++ algorithm data-structures tree

我将数据存储在树的叶子中。使用作为对象元组的键访问叶子。树可能很大,我想浓缩它。例如:

        *
       / \
      a   b
     /|\   \
    1 2 5   1
   / /| |\  |\
  x x y x z y z   <-- Leaves
  | | | | | | |
  1 2 7 1 3 1 1   <-- Values at leaves

元组(*, a, 1, x)(*, a, 5, x)都会在树叶处产生1的值,因此树可以缩小为:

        *
       / \
      a   b
     / \   \
    A   2   1
   /|  /|   |\
  x z x y   y z
  | | | |   | |
  1 3 2 7   1 1

其中A代表15。当然,通过检查集合A中的成员资格来减慢查找速度。我正在寻找描述这种数据结构和相关程序的来源。

我正在使用c ++,以防任何人受到鼓舞,分享相关的代码问题。

1 个答案:

答案 0 :(得分:0)

在不知道您使用树的情况下,很难提出建议,但我相信这样的树结构在实践中实际上永远不会有用,因为使用某种排序集或关联更容易地图比这个。

但是,如果您已经拥有树结构并且希望保持与当前完全一致的效率,则可以代替合并分支,将所有叶子替换为指向数据的指针。这样,您可以存储每个数据对象一次并使多个叶子指向同一个数据对象。它也是最灵活的解决方案,因为您仍然可以通过简单地更改指针来更改任何叶子的值,而在合并分支的想法中,如果没有持久的数据结构,则无法撤消它。