运行无限循环的最小二叉树问题

问题描述 投票:0回答:1

此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;
}
c++ debugging binary-tree infinite-loop minimum-spanning-tree
1个回答
0
投票

更清晰可能会有所帮助

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.