在欧拉游览树上重拍

时间:2014-09-12 13:17:01

标签: data-structures

我最近了解了这个名为Euler Tour Tree的数据结构,它解决了树上的动态连接问题。如果您不了解此数据结构并希望学习,请查看link我在理解重新连根程序时遇到问题。树中的每个节点都必须存储指向所表示的Euler巡回序列中的第一个和最后一个节点的指针。在其他操作中,显然这些值将如何变化是显而易见的,但在重新根据过程中,可能存在高达O(n)的位置变化,并因此变化这些值。有人可以带我走过这个吗?

2 个答案:

答案 0 :(得分:1)

  

树中的每个节点都必须存储指向所表示的Euler巡回序列中第一个和最后一个节点的指针。

这是错的。你只需要存储一个指向顶点任何表示的指针。并且您必须将2个指针从边缘存储到树中的两个(两个方向)边缘。 在O(log n)中可以更新树。

答案 1 :(得分:-1)

实际上,指针确实只针对新根和旧根进行了更改。假设您将指向每个节点的第一个和最后一个节点的指针存储为平衡二叉搜索树(BST)中用于表示Euler巡视的节点的指针。无论你用这个BST做什么(旋转,拆分或合并),节点本身都不会改变(他们的字段像左右子一样改变,但节点本身仍然有效),因此不需要改变指向它们的指针,除非完全删除节点或创建新节点。但是每个操作只删除/创建O(1)个节点。因此,只需要O(1)指针更新。