Вершины дерева вещественные числа. Описать процедуру, которая строит список, узлами которого являются вершины с положительными значениями

Есть задание - "Вершины дерева вещественные числа. Описать процедуру, которая строит список, узлами которого являются вершины с положительными значениями." Дерево в диапазоне -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);.
И пара замечаний:

  1. По условию задачи -

Вершины дерева вещественные числа

а у вас они почему-то целые

struct Branch
{
    int Data; //Поле данных - должно быть вещественным!!!
    Branch* LeftBranch; //УКАЗАТЕЛИ на соседние веточки
    Branch* RightBranch;
};
  1. Добавьте в начало main() инициализацию датчика случайных чисел. Иначе при каждом запуске программы у вас датчик будет генерировать одни и те же числа.
int main(void)
{
    srand( time(0) );
    ....
→ Ссылка