Binary tree http://img9.imageshack.us/img9/9981/binarytree.jpg
序列化给定二叉树的最佳方法是什么,并为每个序列化二叉树计算唯一ID?
例如,我需要序列化子树(2,7,(5,6,11))并生成表示该子树的唯一ID“ x ”,以便每当我遇到了一个类似的子树(2,7,(5,6,11))它将序列化为相同的值' x ',因此我可以推断出我找到了一个匹配
这里我们假设每个节点都具有唯一的属性。在上面的例子中,它将是分配给每个节点的数字,因此它们总是为类似的子树生成相同的id。我试图用C ++做这件事。
是否已存在执行此类序列化树匹配的算法?
答案 0 :(得分:2)
您是否希望能够匹配树的任意部分或运行到某些叶节点的子树? IIUC,你正在寻找后缀匹配。
您还可以查看Compact Directed Acyclic Word Graph的想法。
答案 1 :(得分:2)
我会根据节点的ID和树中的位置制作哈希值(以某种Rabin-Karp方式),即:
long h = 0
for each node in sub tree:
h ^= node.id << (node.depth % 30)
伪代码中的。缺点是不同的子树可能产生相同的哈希值。但优点是比较哈希值的速度很快,并且当找到匹配时,您可以进一步研究实际的子树是否相等。
答案 2 :(得分:1)
如果您不寻求高效率,您可能需要使用非常简单的深度优先搜索算法。
"2,7,2,U,6,5,U,11,U,U,U,5,9,4"
如您所见,我添加了U命令(“up”)以显示下一个孩子的创建位置。当然,你可以提高效率,但我相信这是一个开始。
此外,您可能希望查看Boost.Graph(BGL)以实现。
答案 3 :(得分:1)
您在问题中使用的括号表示法有什么问题?