Минимальная задача бинарного дерева с бесконечным циклом

Этот код C++ не заканчивается в Vscode. Можете ли вы объяснить, почему?

Вот код

минимум два числа

int min(int x,int y)
{
    if(x<y) 

        return x;
    else
        return y;
}

заполнение минимума братьев и сестер в качестве родителя в двоичном дереве

void minimumtree(int arr[], int b, int n)

{

    if(b==0)
        return;
    else
    {
        for(int i=0;i<n;i+2)
        {
            int x=(b+i)/2;
            arr[x]=min(arr[b+i],arr[b+i+1]);
        }
        minimumtree(arr,b/2,n/2);
    }
}

int main()

{ 

leaf input n- количество листьев, b - начало индекса первого листа в массиве

    int n,b; cin>>n>>b; int arr[n+b];

    for(int i=0;i<n;i++)
        cin>>arr[b+i];

ввод запроса

int t;
cin>>t;
int q[t];

for(int i=0;i<t;i++)
    cin>>q[i];

minimumtree(arr,b,n);

вывод запроса

for(int i=0;i<t;i++)
    cout<<arr[q[i]];
return 0;
}

person xikram    schedule 18.01.2020    source источник
comment
i+2 не обновляет i. Это не работает. i после этого по-прежнему равно нулю.   -  person Igor Tandetnik    schedule 19.01.2020
comment
int q[t]; -- int arr[n+b]; -- Эти массивы недопустимы в C++. Массивы в C++ имеют количество элементов, обозначаемое константным выражением, а не значением времени выполнения. Вместо этого используйте std::vector. Во-вторых, VSCode не является компилятором C++ — это редактор кода — если вы установили Visual C++, опубликованный вами код не будет компилироваться из-за того, что было упомянуто об этих массивах.   -  person PaulMcKenzie    schedule 19.01.2020
comment
Можно ли вместо этого использовать i+=2?   -  person xikram    schedule 19.01.2020
comment
Пусть теги описывают сами себя, не указывайте это в заголовке.   -  person tadman    schedule 19.01.2020
comment
@xikram, чтобы ответить на ваш вопрос, да, i += 2; будет работать в цикле for   -  person lukehod    schedule 19.01.2020
comment
Что происходит, когда вы пытаетесь i+=2?   -  person Igor Tandetnik    schedule 19.01.2020
comment
i+=2 совпадает с i=i+2, обновляет i на 2.   -  person xikram    schedule 19.01.2020


Ответы (1)


быть яснее может помочь

int min(int x,int y) {

    return x<y ? x: y;

}

     // filling the minimum of siblings as parent in a binary tree

void minimumtree(int arr[], int b, int n) {

    if(b) {
        for(int i=0; i<n; i+=2)
        {
            int x=(b+i)/2;
            arr[x]=min(arr[b+i],arr[b+i+1]);
        }
        minimumtree(arr,b/2,n/2);
    }

    return;

}

int main() {

   // leaf input n- number of leaves, b - beginning of index of the first leaf in an array

 int n,b;
 cin>>n>>b;
 int *arr = new int[n+b];  // size is in run-time so define or set it dynamically

    for(int i=0; i<n; ++i)
        cin>>arr[b+i];
   // query input

int t;
cin>>t;
int q = new int[t];

for(int i=0; i<t; ++i)
    cin>>q[i];

minimumtree(arr,b,n);

   // query output

for(int i=0;i<t;i++)
    cout<<arr[q[i]];
return 0;
}
person Community    schedule 18.01.2020