问题
给定具有n 个节点的有根树,其中所有叶子都从一组标签中标记出来。构建一个数据结构,给定叶节点a和标签l,可以找到 a 的最低祖先u,其中u至少有一个标签为l的后代。
线性空间/线性时间方法
- 从叶a开始
- 检查a 的所有兄弟姐妹
- 如果一个兄弟姐妹有标签l找到a和那个兄弟姐妹之间的最低共同祖先。
- 否则继续父母
- 如果所有从父母下来的叶节点都没有标记为l,则继续到祖父母并检查它们的叶节点后代。
- 继续递归检查大祖父母及其所有后代叶节点,直到找到带有l标记的后代。
这具有时间复杂度O(n)和空间复杂度O(n)。
有没有更快的方法来处理线性空间复杂度?也许通过某种方式对树进行预处理?l和a不是固定的,因此预处理必须灵活。
可以通过 Eulerian-Tour 使用 RMQ 在恒定时间内找到最低的共同祖先。
请记住,树不平衡或以任何方式排序。