我目前正在学习的区间树对于每个节点都有以下数据结构:
key
: 所有区间端点的中位数left
,right
: 指向左右子树intervals
:包含区间的区间列表key
。
可以在此链接中找到更准确的信息。
我了解到使用区间树进行查询的时间复杂度为 O(logn + k),其中 n 是区间数,k 是报告结果的数量。
我不太明白这logn
部分。假设v
为区间树中的当前节点,Q
为查询区间。该算法将是这样的:
if v.key is in Q,
add v.intervals into results
search_on_left_subtree
search_on_right_subtree
else if Q.right < key,
add some intervals
search_on_left_subtree
else
add some intervals
search_on_right_subtree
似乎首先if
我们可能需要进入两个子树。那么是不是最坏的情况下我们可能不得不遍历所有的树节点,使得时间复杂度为 O(n + k)?