Вершины дерева вещественные числа. Описать процедуру, которая строит список, узлами которого являются вершины с положительными значениями
Есть задание - "Вершины дерева вещественные числа. Описать процедуру, которая строит список, узлами которого являются вершины с положительными значениями." Дерево в диапазоне -100, 100 я создала, помогите пожалуйста с оставшейся частью задания >.<
#include <iostream>
using namespace std;
int tabs = 0; //Для создания отступов
int kol_vo = 0;
//Кол-во отступов высчитывается по кол-ву рекурсивного вхождения при выводе в фукцию print
//Структура ветки
struct Branch
{
int Data; //Поле данных
Branch* LeftBranch; //УКАЗАТЕЛИ на соседние веточки
Branch* RightBranch;
};
//Функция внесения данных
void Add(int aData, Branch*& aBranch)
{
//Если ветки не существует
if (!aBranch)
{ //создадим ее и зададим в нее данные
aBranch = new Branch;
aBranch->Data = aData;
aBranch->LeftBranch = 0;
aBranch->RightBranch = 0;
return;
}
else //Иначе сверим вносимое
if (aBranch->Data > aData)
{ //Если оно меньше того, что в этой ветке - добавим влево
Add(aData, aBranch->LeftBranch);
}
else
{ //Иначе в ветку справа
Add(aData, aBranch->RightBranch);
};
}
//Функция вывода дерева
void print(Branch* aBranch)
{
if (!aBranch) return; //Если ветки не существует - выходим. Выводить нечего
tabs += 5; //Иначе увеличим счетчик рекурсивно вызванных процедур
//Который будет считать нам отступы для красивого вывода
print(aBranch->LeftBranch); //Выведем ветку и ее подветки слева
for (int i = 0; i < tabs; i++) cout << " "; //Потом отступы
cout << aBranch->Data << endl; //Данные этой ветки
print(aBranch->RightBranch);//И ветки, что справа
tabs-= 5; //После уменьшим кол-во отступов
return;
}
void pr_obh(Branch*& aBranch)
{
if (NULL == aBranch) return; //Если дерева нет, выходим
cout << aBranch->Data << endl; //Посетили узел
pr_obh(aBranch->LeftBranch); //Обошли левое поддерево
pr_obh(aBranch->RightBranch); //Обошли правое поддерево
}
int main()
{
setlocale(LC_ALL, "rus");
Branch* Root = 0;
int vel;
int element;
int k;
cout << "Введите кол-во элементов для будущего дерева: ";
cin >> vel;
cout << endl;
for (int i = 0; i < vel; i++)
{
Add(rand() % 201 + (-100), Root);
}
cout << "Вывод бинарного дерева: " << endl;
print(Root);
cout << endl;
cout << "Прямой обход бинарного дерева: " << endl;
pr_obh(Root);
cout << endl;
return 0;
}
Совсем не понимаю что мне надо делать
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
Ну где-то создаете список std::list<double> MyList, или сами его пишете, как написали дерево. А потом делаете обход списка и если значение положительное - добавляете в список if(aBranch->Data > 0) MyList.push_back(aBranch->Data);.
И пара замечаний:
- По условию задачи -
Вершины дерева вещественные числа
а у вас они почему-то целые
struct Branch
{
int Data; //Поле данных - должно быть вещественным!!!
Branch* LeftBranch; //УКАЗАТЕЛИ на соседние веточки
Branch* RightBranch;
};
- Добавьте в начало
main()инициализацию датчика случайных чисел. Иначе при каждом запуске программы у вас датчик будет генерировать одни и те же числа.
int main(void)
{
srand( time(0) );
....