跑一遍序列,根据要求分别将结点标记存入v1、v2、v3
我二刷时用ans数组合并了v1、v2、v3,再进行输出会方便很多,不然的话需要分别考虑v1、v2、v3是否为空的情况(原本我是那样写的,如果是那样写的同学要注意一下只有v2是空的情况)
两种我都放在这
不推荐去记录新序列的下一节点,那样也要分别讨论是否非空的几种情况,也比较麻烦
合并输出的写法:
#include<iostream>
#include<vector>
using namespace std;
struct node{
int num;
int next;
}Node[100005];
int root,N,K;
vector<int> v1,v2,v3,ans;
void go(int index){
if(index==-1) return;
if(Node[index].num<0){
v1.push_back(index);
}else if(Node[index].num<=K){
v2.push_back(index);
}else{
v3.push_back(index);
}
go(Node[index].next);
}
int main(){
cin>>root>>N>>K;
for(int i=0;i<N;i++){
int index;
scanf("%d",&index);
scanf("%d %d",&Node[index].num,&Node[index].next);
}
go(root);
ans.insert(ans.end(),v1.begin(),v1.end());
ans.insert(ans.end(),v2.begin(),v2.end());
ans.insert(ans.end(),v3.begin(),v3.end());
for(auto it=ans.begin();it!=ans.end();it++){
if(it==ans.begin()){
printf("%05d %d ",*it,Node[*it].num);
}else{
printf("%05d\n%05d %d ",*it,*it,Node[*it].num);
}
}
printf("-1\n");
return 0;
}
不合并输出的写法:
#include<iostream>
#include<vector>
using namespace std;
struct node{
int num;
int next;
}Node[100005];
int root,N,K;
vector<int> v1,v2,v3;
void go(int index){
if(index==-1) return;
if(Node[index].num<0){
v1.push_back(index);
}else if(Node[index].num<=K){
v2.push_back(index);
}else{
v3.push_back(index);
}
go(Node[index].next);
}
int main(){
cin>>root>>N>>K;
for(int i=0;i<N;i++){
int index;
scanf("%d",&index);
scanf("%d %d",&Node[index].num,&Node[index].next);
}
go(root);
for(auto it=v1.begin();it!=v1.end();it++){
if(it==v1.begin()){
printf("%05d %d ",*it,Node[*it].num);
}else{
printf("%05d\n%05d %d ",*it,*it,Node[*it].num);
}
}
if(v1.size()!=0&&v2.size()!=0) printf("%05d\n",v2[0]);
for(auto it=v2.begin();it!=v2.end();it++){
if(it==v2.begin()){
printf("%05d %d ",*it,Node[*it].num);
}else{
printf("%05d\n%05d %d ",*it,*it,Node[*it].num);
}
}
if((v2.size()!=0||v1.size()!=0)&&v3.size()!=0) printf("%05d\n",v3[0]);
for(auto it=v3.begin();it!=v3.end();it++){
if(it==v3.begin()){
printf("%05d %d ",*it,Node[*it].num);
}else{
printf("%05d\n%05d %d ",*it,*it,Node[*it].num);
}
}
printf("-1\n");
return 0;
}