L3-010 是否完全二叉搜索树 (30 分)——测试点6wa分析
思路
二叉搜索树建树+层序遍历,看代码即可。
这里说一说易错点6,小心
n
=
1
n=1
n=1 的情况
AC代码
#include<bits/stdc++.h>
#define ll long long
#define rep(i,x,y) for(int i=x; i<=y; ++i)
#define per(i,x,y) for(int i=x; i>=y; --i)
#define mem(a,b) memset(a,b,sizeof a)
#define pk push_back
#define PLI pair<ll,int>
using namespace std;
const int N = 1e5+9;
int a[N];
int tr[N*4];
void build(int id,int num){
if(!tr[id]) {
tr[id]=num;
return ;
}
if(tr[id]<num) build(id<<1, num);
else build(id<<1|1, num);
}
int main() {
int n;
cin>>n;
rep(i,1,n)
scanf("%d",&a[i]),build(1,a[i]);
bool ok=1;
rep(i,1,n) if(!tr[i]) ok=0;
int t=1;
for(int i=1; t<=n; ++i){
if(tr[i]){
cout<<tr[i];
t++;
if(t<=n) cout<<" ";
}
}
puts("");
if(ok) puts("YES");
else puts("NO");
return 0;
}
朋友WA的代码
因为她初始化ma=-1,当n为1的时候,进不了max函数,初始化ma=1即可
#include<bits/stdc++.h>
using namespace std;
int s[1048580];
int ma=-1;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x,id=1;
cin>>x;
while(s[id]){
if(s[id]>x){
id=id*2+1;
}else{
id=id*2;
}
}
s[id]=x;
}
queue<int>q;
q.push(1);
while(!q.empty()){
int id=q.front();
q.pop();
if(id!=1){
cout<<" ";
}
cout<<s[id];
if(s[id*2]){
q.push(id*2);
ma=max(ma,id*2);
}
if(s[id*2+1]){
q.push(id*2+1);
ma=max(ma,id*2+1);
}
}
//for(int i=1; i<=n; i++) if(s[i]) ma++;
cout<<endl;
if(ma==n){
cout<<"YES";
}else{
cout<<"NO";
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话