【发布时间】:2014-05-24 06:27:27
【问题描述】:
给定完整二叉树中的两个节点(父 x 比子 2*x 和 2*x+1),我正在寻找最低共同祖先的恒定时间实现。
我的问题是树中有大量节点和很多查询。是否有一种算法可以进行预处理,以便可以在恒定时间内回答查询。
我查看了LCA using RMQ,但我无法使用该技术,因为我无法将数组用于树中的这么多节点。
知道它是完整的二叉树并且节点之间的关系如上所述。
我所做的是从两个给定节点开始,并依次找到它们的父节点 (node/2),保留访问节点的哈希列表。当我们到达一个已经在哈希列表中的节点时,该节点将是最低的共同祖先。
但是当有很多查询时,这个算法非常耗时,因为在最坏的情况下,我可能必须遍历 30 的高度(树的最大高度)才能到达根(最坏的情况)。
【问题讨论】:
-
请澄清树是如何表示的:听起来它存储在一个数组中,其中索引 X 的节点的子节点位于索引 2*x 和 2*x+1。
-
@ScottHunter 他说这不是一个数组。
-
不需要存储树,因为节点是按顺序编号的,我们可以得到 2*x 和 2*x+1 的子节点
-
所以节点按照它们存储在数组中的方式编号。
标签: algorithm optimization tree binary-tree