通过输出中间变量,发现 k 和 res 的值一直卡在 1 1。
#include<bits/stdc++.h>
using namespace std;
struct node{
int num,l,r;
}a[300005];
int n,cnt=0;
int dep=0;
void add(int x,int k,int res){ //数字 节点编号 层数
//cout<<a[k].l<<" "<<a[k].r<<"\n";
if(a[k].num==0){ //如果为空
dep=max(dep,res); //层数取最大值
a[k].num=x; //赋值
return;
}
if(x<=a[k].num){ //左子树
if(a[k].l==0){ //如果为空
cnt++; //新建一个
a[cnt].num=a[cnt].l=a[cnt].r=0;
a[k].l=cnt;
}
add(x,a[k].l,res+1); //递归
}
else{
if(a[k].r==0){ //同上
cnt++;
a[cnt].num=a[cnt].l=a[cnt].r=0;
a[k].r=cnt;
}
add(x,a[k].r,res+1);
}
}
void prt(int k){ //后序输出
if(a[k].l!=0){
prt(a[k].l);
}
if(a[k].r!=0){
prt(a[k].r);
}
cout<<a[k].num<<"\n";
}
int main(){
cin>>n;
int x,op;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++){
//a[i].num=a[i].l=a[i].r=0;
cin>>x;
add(x,1,1);
}
cout<<"deep:"<<dep<<"\n";
prt(1);
return 0;
}