Практики «Add и Contains» и «Enumerable и Индексатор»

Репозиторий содержит решения этой и этой задачи с ulearn.me. Задачи прошли код-ревью у преподавателя (баллы: 50/50, 100/100). Все решения курса на максимальный балл также выложены в других репозиториях. Ветка unsolved содержит изначальный проект.

Конечное приложение - библиотека для бинарного дерева поиска.

Практика «Add и Contains»

В этой и следующей задаче нужно будет реализовать структуру данных «Бинарное дерево поиска».

Реализуйте бинарное дерево так, как это описано в видеолекциях с двумя операциями:

Add(T key);
bool Contains(T key);

Эти два метода должны быть реализованы без использования рекурсии.

Практика «Enumerable и Индексатор»

В этой задаче вам предстоит реализовать ещё две операции с деревом.

Реализуйте интерфейс IEnumerable<T> в вашем дереве так, чтобы перечисление элементов происходило в порядке их возрастания и имело сложность O(n), где n — количество элементов в дереве.

Реализуйте индексатор T this[int i] у дерева, возвращающий i-ый по порядку (в порядке возрастания) элемент, содержащийся в дереве.

Сложность этой операции должна быть O(h), где h — высота дерева.

Для решения этой задачи для каждого узла дерева вам придется хранить и поддерживать еще и размер его поддерева.

Для простоты, обе операции реализуйте с использованием рекурсии.