反转一个二叉树:在cmp函数和dfs函数中做调整
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct node{
int id,r,l,index,level;
} a[100];
vector<node> v1;
void dfs(int root,int index,int level){
if(a[root].r!=-1) dfs(a[root].r,index*2+2,level+1);
v1.push_back({root,0,0,index,level});
if(a[root].l!=-1) dfs(a[root].l,index*2+1,level+1);
}
bool cmp(node n1,node n2){
if(n1.level==n2.level)
return n1.index>n2.index;
return n1.level<n2.level;
}
int main(){
int n,have[100]={0},root=0;
cin>>n;
for(int i=0;i<n;i++){
a[i].id=i;
string r,l;
cin>>l>>r;
if(l!="-") {
a[i].l=stoi(l);
have[stoi(l)]=1;
}
else a[i].l=-1;
if(r!="-"){
a[i].r=stoi(r);
have[stoi(r)]=1;
}
else a[i].r=-1;
}
while(have[root]==1) root++;
dfs(root,0,0);
vector<node> v2(v1);
sort(v2.begin(),v2.end(),cmp);
for(int i=0;i<v2.size();i++){
if(i!=0) cout<<' ';
cout<<v2[i].id;
}
cout<<endl;
for(int i=0;i<v1.size();i++){
if(i!=0) cout<<' ';
cout<<v1[i].id;
}
return 0;
}