Я сомневаюсь, потому что вам либо нужно:
Удалите предметы, в результате чего дерево будет сбалансировано
Добавление элементов в новое дерево, в результате чего новое дерево будет сбалансировано
Вы не можете избежать этого, но может быть эффективнее просто выполнить итерацию по ним и поместить их в SortedList
, если вы не будете часто изменять данные.
Да
Перебирайте элементы, затем добавляйте каждый другой элемент в новое дерево вместо изменения текущего дерева. Таким образом, вы избежите затрат на вызов ElementAt
каждый раз, что на минимум логарифмическое в идеальной реализации и линейное с LINQ (что ужасно , потому что LINQ не имеет представления о реализации вашего дерева).
Что касается исключения: да, это приведет к снижению производительности. Но я понятия не имею, насколько это связано с тем, что вы делаете, поэтому это может быть или не быть значительным.
Но в любом случае, вы не должны игнорировать исключения . :)
Пока вы на это:
Возможно, стоит взглянуть на функциональное программирование . :)