TreeSet
итерация - это, конечно, O (n), что можно ожидать от любого разумного алгоритма обхода дерева.
Я думаю, что, предоставляя ссылки
назад от дочернего узла к родительскому
узел я мог бы улучшить производительность.
TreeMap
(на котором основан TreeSet
) уже имеет такие родительские ссылки. Это метод, который сводится к следующему:
private Entry<K,V> successor(Entry<K,V> t) {
if (t == null)
return null;
else if (t.right != null) {
Entry<K,V> p = t.right;
while (p.left != null)
p = p.left;
return p;
} else {
Entry<K,V> p = t.parent;
Entry<K,V> ch = t;
while (p != null && ch == p.right) {
ch = p;
p = p.parent;
}
return p;
}
}