【代码死循环】【有注释求调】
查看原帖
【代码死循环】【有注释求调】
1068165
InfiniteRobin楼主2024/8/20 19:05

通过输出中间变量,发现 kk 和 resres 的值一直卡在 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;
}
2024/8/20 19:05
加载中...