Смысл и предназначение обычного бинарного дерева? Какова погрешность измерение времени программы при помощи Stopwatch'ера?
============================================================================================================================

 Добрый день, Хабрачане! Мне нужна ваша помощь в понимании некоторых аспектов. Вот вопросы, которые у меня возникли при изучении Stopwatch и бинарных деревьев:  

1. Какая "погрешность" Stopwatch'ера при измерении времени выполнения, например, какого-то куска кода? Ведь в Stopwatch'ере есть проверки.  

2. Я знаю, что такое бинарное дерево поиска, для чего оно нужно, когда используется и т. д.... Но... для чего нужны обычные бинарные деревья? Какие **у них** правила добавления нового элемента, если в бинарном дереве поиска, если данный элемент меньше элемента, с которым сравнивается, то он идёт влево, а если больше, то - вправо?  

3. Хабрачане, можете, пожалуйста, придумать мне вопросы для самопроверки по бинарным деревьям(и поиска, и обычному)? А то у меня такое чувство, будто я что-то не понял или не знаю, хотя, вроде, когда разбирал бинарное дерево поиска, то всё хорошо понял. Упор в самопроверке я бы хотел на теорию. Или же, как вариант, подскажите, где я могу проверить свои теоретические знания по бинарным деревьям, пожалуйста. 

 Бинарные деревья это обычно деревья поиска. Просто бинарные деревья, по-моему, не используются. Единственное, что на ум приходит, это hash tree(Merkle tree) в криптографии. В общем, правила будут такие, какие задашь в имплементации.  

Вопросы, ну например, что такое высота дерева? (Здесь и далее за дерево считай BST). Каково асимптотическое поведение основных операций над деревом? Как их улучшить? Что такое сбалансированное дерево? Какие реализации сбалансированных деревьев поиска ты знаешь? Какие из них используются в стандартной библиотеке твоего основного языка?   

Можно придумать пачку вопросов про обход: как обойти дерево по слоям(в ширину)? В глубину? Как проверить, что бинарное дерево является деревом поиска?   

Ну и потом можно спросить, какие небинарные деревья ты знаешь? 

 Просто бинарное дерево ради бинарного дерева особо нигде не используется. Это просто вид организации данных. Можно их линейно в список или массив сложить, можно организовать в виде дерева. Но на нем можно делать разные крутые штуки, навешивая что-то сверху. Обычно получается делать всякие полезные вещи с логарифмической сложностью - потому что дерево, если его удачно организовать имеет логарифмическую высоту.  

  

Можно поддерживать его сортированным и балансированным - вот и стандартные деревья поиска, работающие за log n. Можно поддерживать свойство кучи (предки больше потомков), и у вас получается куча, на которой можно делать приоритетную очередь. Можно зафиксировать высоту дерева и класть данные только в листы, а в промежутачных вершинах считать сумму детей - так получается дерево отрезков, которое позволяет за логарифм считать сумму или максимум на любом отрезке в массиве, менять элементы, добавлять значение ко всем элементам на отрезке и много чего другого.  

  

Про stopwatch ничего не знаю, что это такое даже.  

  

А вопросы на бинарные деревья - они неинтересные и тривиальные (сколько детей? Минимально возможная высота дерева? Сколько промежуточных вершин при данном количестве детей и выстое?)  

Вопросы надо задавать про конкретную структуру данных - какие операции с ней можно выполнять и как долго они работают. Сколько памяти нужно для хранения.