Дано бинарное дерево, в вершине которого содержится строка и два указателя на элементы-потомки. В программе должны быть разработаны минимум две функции. Первая функция должна определять количество ветвей n
-го уровня для этого дерева. Вторая функция выполняет вывод элементов дерева на экран.
К сожалению, решения данной задачи пока нет. Если Вы решили эту задачу, сообщите нам, и мы выложим её на сайте.
E-mail : admin@cppstudio.com
Комментарии
Артём Вильчук
Артём Вильчук
эмм,вот:
если надо скажите, что изменить и добавить нужн. Пояснил некоторые моменты,ещё вопрос один у меня есть:как красиво вывести дерево это?
___________________________________________
#include <iostream>
using namespace std;
struct Derevo
{
int x;
Derevo *left = NULL;
Derevo *right = NULL;
};
void add_new_element_in_derevo(Derevo* koren, Derevo* new_element)//функция вставляет в нужное место в деревке мой новый элемент
{
if (koren->x > new_element->x && koren->left != NULL)//шагаем
add_new_element_in_derevo(koren->left, new_element);
if (koren->x < new_element->x && koren->right != NULL)//шагаем
add_new_element_in_derevo(koren->right, new_element);
if (koren->x > new_element->x && koren->left == NULL)//добавляем
koren->left = new_element;
if (koren->x < new_element->x && koren->right == NULL)//добавляем
koren->right = new_element;
}
void input_element(Derevo* koren,bool &t)//функция ввода значения нового элемента(и в ней функция добавления этого элемента в деревко)
{
cout << «\n_______________________________________\nЕсли ввести \»999\», то ввод прекратится! \n_______________________________________\n»;
cout << «Введите значение нового элемента : «;
Derevo *a1 = new Derevo;
cin>>a1->x;
if (a1->x == 999)
{
t = false;
return;
}
add_new_element_in_derevo(koren,a1);
}
void LEVEL(Derevo *koren_d,int &i,int &max_level)//считает количество уровней в деревке моём :)(нужно для вывода деревка,чтобы знать на сколько уровней погружаться рекурсией)
{
if (koren_d->left != NULL)
{
i++;
if (max_level < i)
max_level = i;
LEVEL(koren_d->left, i, max_level);
i—;
}
if (koren_d->right != NULL)
{
i++;
if (max_level < i)
max_level = i;
LEVEL(koren_d->right, i, max_level);
i—;
}
}
void display_level(Derevo *koren_d, int &i, int level)//выводит уровень № level у деревка :)
{
if (i == level)
cout <<koren_d->x <<» «;
if (koren_d->left != NULL)
{
i++;
display_level(koren_d->left, i, level);
i—;
}
if (koren_d->right != NULL)
{
i++;
display_level(koren_d->right, i, level);
i—;
}
}
void display_all(Derevo *koren)
{
int i = 0;//нужна для сквозной нумерации уровня в рекурсиях.(по крайней мере моя башка не придумала ничего лучше этого костыля)
int max_level = 0;
LEVEL(koren, i, max_level); //—узнаю максимальный уровень дерева
cout << «max level = » << max_level << endl;
for (int level = 0; level <= max_level; level++) //—цикл поочереди выводит каждый уровень девера, начиная с корняж
{
if (level == 0)
cout << «[ koren ] : «;
else
cout << «[» << level << » lvl] : «;
display_level(koren, i, level);//—функция вывода 1 уровня дерева
cout << endl;
}
}
void main()
{
setlocale(LC_ALL, «Russian»);
Derevo *koren = NULL;
Derevo *a0 = new Derevo;
cout << «Введите значение корня : «;
cin >> a0->x;
koren = a0;
/////////////////////////////////////////
bool t = true;//нужна для выхода из цикла(когда введу 999 — поменяетс на false и цикл добавления прекратится)
while (t)
{
display_all(koren);//—вывожу всё дерево(существующее на данный момент)
input_element(koren,t);//добавляю новый элемент в деревко
system(«cls»);
}
}
Mechanic
Мой вариант решения:
curunir
Жалко что тут нельзя удалять :с
Вот готовый вариант, а там поспешил и не всё сделал.