堆,树的问题,从右向左输出
学习大佬的代码
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <cmath>
#include <map>
#include <set>
using namespace std;
int m;
vector<int> ans;
int tree[10000];
void dfs(int node){
if(node*2>m && node*2+1>m){
if(node<=m){
for(int i=0; i<ans.size(); i++){
if(i==0) cout << ans[i];
else cout << " " << ans[i];
}
cout << endl;
}
}
else{
ans.push_back(tree[node*2+1]);
dfs(node*2+1);
ans.pop_back();
ans.push_back(tree[node*2]);
dfs(node*2);
ans.pop_back();
}
}
int main(){
cin >> m;
for(int i=1; i<=m; i++){
cin >> tree[i];
}
ans.push_back(tree[1]);
dfs(1);
int min = 1;
int max = 1;
for(int i=2; i<=m; i++){
if(tree[i/2] > tree[i]) min = 0;
if(tree[i/2] < tree[i]) max = 0;
}
if(min==1){
cout << "Min Heap" << endl;
}
else if(max==1) cout << "Max Heap" << endl;
else cout << "Not Heap" << endl;
return 0;
}