Я доволен первой операцией O (log n), чтобы найти мою начальную точку в
NavigableMap<Double,MyThing> navlevel = new TreeMap<>();
Но в рукописном C ++ (или, я полагаю, рукописном Java), как только я нашелузел, указывающий на рассматриваемый MyThing, затем я мог бы выполнить «следующую» операцию на этом узле, которая бы амортизировала всего пару операций с указателями.(Если есть правая ссылка, идите вправо, затем полностью влево; в противном случае переходите к своему родителю, пока не найдете узел, из которого вы исходите из левого дочернего узла родителя.)
Map.Entry<Double,MyThing> entry =
navthing.ceilingEntry( dSomeValue );
while ( entry != null ) {
MyThing level = entry.getValue();
// Process and break on some condition.
// vvvvvvvvv This I'm sure is O( log n ) and I want it to be faster!
entry = navthing.higherEntry( entry.getKey() );
}