Задача минимального бинарного дерева, выполняющая бесконечный цикл - PullRequest
0 голосов
/ 19 января 2020

Этот код 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()

{ 

лист ввода 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;
}

1 Ответ

0 голосов
/ 19 января 2020

Проясните, может помочь

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...