Как построить из ОПЗ бинарное дерево с++?

196
18 декабря 2017, 14:39

Вот пример реализации ОПЗ, возможно местами криво. Как из этого сделать бинарное дерево? У меня идея была построить двумерный массив и уже оттуда считать правда трудно получается.

#include <iostream> 
#include <conio.h> 
#include <cmath> 
using namespace std;
//ОПЗ запись с++
int main()
{
    setlocale(LC_ALL, "Russian");
    int i = 0, s = 0, e = 0, n1 = 0, v = 0, ch, s2 = 0;
    char vr[100], stek[100], exit[100];
    double stek2[100];
cout << "Введите выражение: \n";
cin >> vr;
for (i = 0; vr[i] != '\0'; i++)
    switch (vr[i])
{
    case '+':
        while ((s != 0) && (stek[s - 1] != '('))
        {
            exit[e] = stek[s - 1]; //на выход 
            e++;
            s--;
        }
        stek[s] = '+'; //в стек 
        s++;
        break;
    case '-':
        while ((s != 0) && (stek[s - 1] != '('))
        {
            exit[e] = stek[s - 1];
            e++;
            s--;
        }
        stek[s] = '-';
        s++;
        break;
    case '*':
        while ((s != 0) && (stek[s - 1] != '(') && (stek[s - 1] != '+') && (stek[s - 1] != '-'))
        {
            exit[e] = stek[s - 1];
            e++;
            s--;
        }
        stek[s] = '*';
        s++;
        break;
    case '/':
        while ((s != 0) && (stek[s - 1] != '(') && (stek[s - 1] != '+') && (stek[s - 1] != '-'))
        {
            exit[e] = stek[s - 1];
            e++;
            s--;
        }
        stek[s] = '/';
        s++;
        break;
    case '(':
    {
                stek[s] = '(';
                s++;
                break; }
    case ')':

        while ((stek[s - 1] != '(') && (s != 0))
        {
            exit[e] = stek[s - 1];
            e++;
            s--;
        }
        stek[s - 1] = ' ';
        s--;
        break;
    default:
    {
               exit[e] = vr[i];
               e++;
               if ((vr[i + 1] == '+') || (vr[i + 1] == '-') || (vr[i + 1] == '*') || (vr[i + 1] == '/') || (vr[i + 1] == '(') || (vr[i + 1] == ')'))
               {
                   exit[e] = ' ';
                   e++;
               }
    }
}
exit[e] = ' ';
e++;
while (s != 0)
{
    exit[e] = stek[s - 1];
    e++;
    s--;
}
cout << "ОПЗ ";
for (i = 0; i < e; i++)
{
    cout << exit[i];
}
system("pause");
return 0;

}

READ ALSO
Ошибка с выделением памяти

Ошибка с выделением памяти

Есть код, который расписывает матрицу и считает суммы диагоналей(будет ниже) В коде есть функция которая задаёт размер матрицы с клавиатуры(Матрица...

245
Qsort не работает в XCode

Qsort не работает в XCode

Столкнулся с проблемой при решении задачи на XCode

204
Реализация алгоритма COS(дискретное логарифмирование) [требует правки]

Реализация алгоритма COS(дискретное логарифмирование) [требует правки]

Ребят, помогите, пожалуйста с реализацией алгоритма cosалгоритм cos Описанный там алгоритм, не могу понять, может сможете объяснить на понятном...

161