我做我的SO和谷歌的研究,并没有发现任何人谁之前解决这一点,或至少,谁写了。

我的问题是,给定的任意高度的一个“通用”的树,能够有分支的任意数量的每个节点上,有一个方法来唯一地(且有效地)的“指纹”任意的子树从“开始通用的”树的根,例如,鉴于通用树和树的指纹,我可以重构原始树?

举例来说,我有一个“万能”树(原谅我那可怜的插图),代表我的可能性的宇宙:

                Root
        /  /  /  |  \  \ ... \
       O  O  O   O   O  O     O  (Level 1)
      /|\/|\...................\ (Level 2)

我也有树A,我的宇宙的根的子树

        Root
      / /|\ \
     O O O O O
    /

有没有一种方法来“指纹”的树,所以,鉴于指纹,和普遍的树,我可以重建?

我想沿着杂烩,压缩,或者一个功能/声明结构线的东西?大-O分析(在时间或空间)尤佳。

作为对于实例,嵌套表达,如:?{{(Root)},{(1),(2),(3)},{(2,3),(1),(4,5)}...}代表实际节点呈现在树中的每个电平可能是有效的,但它可以被更有效地完成

有帮助吗?

解决方案

我会用列表的列表,在列表中的状态的每个元素有多少孩子,你有:

[[2][1,2][0,0,0]]

时与第一级和左子两个节点树具有一个子节点,和右子节点都有自己的2。

运行,通过所选的无损压缩算法的输出。

您也可以使用树的深度优先遍历,或任何其他类型的遍历真的。无论是最简单的为你从重建。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top