求助一道站外题
  • 板块灌水区
  • 楼主Qiaozi_Tyc
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/25 19:22
  • 上次更新2024/7/25 20:15:26
查看原帖
求助一道站外题
800763
Qiaozi_Tyc楼主2024/7/25 19:22

题目链接

这个代码的dfs自身调用怎么写的QwQ

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+7;
int que[N],path[N];
bool big=0,small=0;
void dfs(int u,int step,int n){
	path[step]=que[u];//存储当前步骤
	if(u*2>n){//如果是叶子节点
		for(int i=0;i<=step;i++){
			if(i){//如果不是根节点
				if(path[i]>path[i-1]){//如果当前比上一个大,则是小根堆
					small=1;
				}
				else if(path[i]<path[i-1]){//如果当前比上一个小,则是大根堆
					big=1;
				}
			}
			cout<<path[i]<<" ";//打印当前路径
		}
		cout<<"\n";
		return ;
	}
	
}
int main(){
	int n;cin>>n;
	for(int i=1;i<=n;i++){
		cin>>que[i];
	}
	dfs(1,0,n);
	if((big&&small)||!(big&&small)){
		cout<<"Not Heap";
	}
	else if(big){
		cout<<"Max Heap";
	}
	else{
		cout<<"Min Heap";
	}
}
/*
dfs思考思路
1、u*2 大于n的都是叶子节点
2、完全二叉树的遍历
3、到达叶结点,输出搜索路径
*/

2024/7/25 19:22
加载中...