求助!!!!!

P2249 【深基13.例1】查找

zhangzhixu000001 @ 2024-04-15 00:43:02

首先说明:此查找方式为本人即兴写出来的,运用了小根堆向下调整的思想。
正文:heap_find函数到底最后递归什么啊!!!
不递归就会满江紫!!!!!

#include <bits/stdc++.h>
using namespace std;
#define io ios::sync_with_stdio(0)
#define ls(n) n<<1//位运算加速 
#define rs(n) n<<1|1//同上 
const int maxn=1e6+10;
int heap[maxn],fi[maxn],n,m;
void init()//初始化,爱看不看(不是) 
{
    io;
    cin>>n>>m;
    for (int i=1;i<=n;i++) cin>>heap[i];
    for (int i=1;i<=m;i++) cin>>fi[i];
    return;
}
int heap_find(int num,int find)//堆查找 
{
    int ans=-1;
    if(num>n) return ans;//越界了 ,返回-1 
    else if (heap[num]==find) {ans=num;return num;}//如果找到了,返回编号  
    if (heap[ls(num)]<=heap[rs(num)]) heap_find(ls(num),find);//如果左儿子比右儿子小,继续递归左边的 
    else heap_find(rs(num),find);//否则递归右边的 
    return ans;
}

int main() {
    init();
    for (int i=1;i<=m;i++) cout<<heap_find(1,fi[i])<<' ';
    return 0;
}

by zhangzhixu000001 @ 2024-04-15 00:45:05

补:返回ans是错的


|