【发布时间】:2013-08-31 20:26:56
【问题描述】:
有没有办法在平衡二叉搜索树中使用它们在
我们可以假设我们已经将每个节点的排名(或高度)动态地存储为节点类的成员变量。所以,我们可以直接访问它。
【问题讨论】:
标签: java performance binary-search-tree treenode avl-tree
有没有办法在平衡二叉搜索树中使用它们在
我们可以假设我们已经将每个节点的排名(或高度)动态地存储为节点类的成员变量。所以,我们可以直接访问它。
【问题讨论】:
标签: java performance binary-search-tree treenode avl-tree
是的,使用lowest common ancestor 查询可以在恒定时间内计算其间的节点。它需要在线性时间内对树进行一次预处理。
如果您知道两个节点的最低共同祖先的排名,那么您可以通过从子节点的排名中减去祖先的排名来计算一个节点和祖先之间有多少个节点。
nodes_between = a.rank + b.rank - 2*(lowest_common_ancestor(a, b).rank) + 1
上面将返回节点a和b之间的路径长度,包括两个端点。 + 1 代表最低的共同祖先本身。找到lowest_common_ancestor可以在常数时间内完成,计算是常数时间。
【讨论】: