Напишите программу, которая будет реализовывать действия в бинарном дереве поиска «вставить» и «найти» (по значению). Программа должна обрабатывать запросы трёх видов:
ADD n
— если указанного числа еще нет в дереве, вставлять его и выводить слово «DONE
», если уже есть — оставлять дерево как было и выводить слово «ALREADY
».
SEARCH
— следует выводить слово «YES
» (если значение найдено в дереве) или слово «NO
» (если не найдено). Дерево при этом не меняется.
PRINTTREE
— выводить все дерево, обязательно используя алгоритм, указанный в формате вывода результатов.
Входные данные
В каждой строке входных данных записан один из запросов ADD n
или SEARCH n
или PRINTTREE
. Гарантируется, что запросы PRINTTREE
будут вызываться только в моменты, когда дерево не пустое. Общее количество запросов не превышает 1000, из них не более 20 запросов PRINTTREE
.
Выходные данные
Для каждого запроса выводите ответ на него. Для запросов ADD
и SEARCH
— соответствующее слово в отдельной строке. На запрос PRINTTREE
надо выводить дерево, обязательно согласно такому алгоритму:
template void print_tree(Node *p, int level)
{
if(p==NULL)
return;
print_tree(p->left, level+1);
for(int i=0; i < level; i++)
cout << ".";
cout << p->data << endl;
print_tree(p->right, level+1);
}
(Изначальный вызов этой функции — print_tree(root,0).)
Примеры
№ |
Входные данные |
Выходные данные |
1 |
ADD 2
ADD 3
ADD 2
SEARCH 2
ADD 5
PRINTTREE
SEARCH 7
|
DONE
DONE
ALREADY
YES
DONE
2
.3
..5
NO
|