Почему интервальное дерево должно хранить максимально правый конец поддерева?
Я изучаю реализацию дерева интервалов, и мне интересно, могу ли я использовать красное черное дерево без сохранения максимального значения и использования следующего псевдокода?
i=input_interval
x=tree.root
while x!=None AND check_overlap(i,x)==False:
if x.left!=None AND i.high < x.low:
x=x.left
else:
x=x.right
return x
1 ответ
Решение
Если я правильно понимаю ваш псевдокод, это не сработает, например, для следующего дерева:
30-40
/ \
20-45 null
Мы ищем i := 41-42
Мы получаем:
-> check_overlap(i,root) = false
-> x.left(20,45) != null AND i.high(42) < x.low(40) = false
таким образом, мы вернемся вправо, что неверно, поскольку интервал перекрывается с левым поддеревом.