首页 > 代码库 > 二叉搜索树(模板)
二叉搜索树(模板)
#include<cstdio> using namespace std; const int M=9999; struct tr{ int l,r,x,size,num,f; }a[M]; int tot=1; void insert(int v,int u){ if(!v)return; if(u>a[v].x) { if(!a[v].r) { a[++tot].x=u; a[tot].f=v; a[tot].size=1; a[v].r=tot; } else insert(a[v].r,u); } else{ if(!a[v].l) { a[++tot].x=u; a[tot].size=1; a[tot].f=v; a[v].l=tot; } else insert(a[v].l,u); } a[v].size=a[a[v].l].size+a[a[v].r].size+1; } /*int ins(int t,int v,int l,int r){ if(!s[l].key) s[t].l=newcode(v); else if(s[l].key>v&&!s[r].key) s[t].r=newcode(v); else if(v<s[l].key){ ins(l,v,s[l].l,s[l].r); } else if(){ ins(s[t].r,v); } s[t].size=s }*/ int getmax(int t){ while(a[t].r!=0){ t=a[t].r; } return t; } int check(int t,int k){ if(a[a[t].l].size==k-1) return a[t].x; if(a[a[t].l].size>k-1) { return check(a[t].l,k); } else{ return check(a[t].r,k-a[a[t].l].size-1); } } int check2(int t,int k,int ans){ if(a[t].x==k){ return ans+a[a[t].l].size; } if(a[t].x>k){ return check2(a[t].l,k,ans); } else return check2(a[t].r,k,ans+a[a[t].l].size+1); } int check3(int t,int k){ if(a[t].x==k){ return k; } if(a[t].x>k){ if(!a[a[t].l].x)return a[t].x; return check3(a[t].l,k); } if(a[t].x<k){ if(!a[a[t].r].x)return a[t].x; return check3(a[t].r,k); } } /*int check4(int t,int k,int ans){ if(a[t].x==k){ check(); } if(a[t].x>k){ return check2(a[t].l,k,ans); } else return check2(a[t].r,k,ans+a[a[t].l].size+1); }*/ int n; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ int q,y; scanf("%d%d",&q,&y); if(i==1) { a[1].x=y; a[1].size=1; continue; } if(q==1){ insert(1,y); } if(q==2){ } if(q==3) printf("%d\n",check(1,y)); if(q==4) printf("%d\n",check2(1,y,1)); if(q==5){ printf("%d\n",check3(1,y)); } if(q==6) { int k=check2(1,y,1); printf("%d\n",check(1,k-1)); } if(q==7) { int k=check2(1,y,1); printf("%d\n",check(1,k+1)); } } for(int i=1;i<=tot;i++){ // printf("%d \n",a[i].size); } }
#include<cstdio> using namespace std; const int M=9999; struct tr{ int l,r,x,size,num,f; }a[M]; int tot=1; void insert(int v,int u){ if(!v)return; if(u>a[v].x) { if(!a[v].r) { a[++tot].x=u; a[tot].f=v; a[tot].size=1; a[v].r=tot; } else insert(a[v].r,u); } else{ if(!a[v].l) { a[++tot].x=u; a[tot].size=1; a[tot].f=v; a[v].l=tot; } else insert(a[v].l,u); } a[v].size=a[a[v].l].size+a[a[v].r].size+1; } /*int ins(int t,int v,int l,int r){ if(!s[l].key) s[t].l=newcode(v); else if(s[l].key>v&&!s[r].key) s[t].r=newcode(v); else if(v<s[l].key){ ins(l,v,s[l].l,s[l].r); } else if(){ ins(s[t].r,v); } s[t].size=s }*/ int getmax(int t){ while(a[t].r!=0){ t=a[t].r; } return t; } int check(int t,int k){ if(a[a[t].l].size==k-1) return a[t].x; if(a[a[t].l].size>k-1) { return check(a[t].l,k); } else{ return check(a[t].r,k-a[a[t].l].size-1); } } int check2(int t,int k,int ans){ if(a[t].x==k){ return ans+a[a[t].l].size; } if(a[t].x>k){ return check2(a[t].l,k,ans); } else return check2(a[t].r,k,ans+a[a[t].l].size+1); } int check3(int t,int k){ if(a[t].x==k){ return k; } if(a[t].x>k){ if(!a[a[t].l].x)return a[t].x; return check3(a[t].l,k); } if(a[t].x<k){ if(!a[a[t].r].x)return a[t].x; return check3(a[t].r,k); } } /*int check4(int t,int k,int ans){ if(a[t].x==k){ check(); } if(a[t].x>k){ return check2(a[t].l,k,ans); } else return check2(a[t].r,k,ans+a[a[t].l].size+1); }*/ int n; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ int q,y; scanf("%d%d",&q,&y); if(i==1) { a[1].x=y; a[1].size=1; continue; } if(q==1){ insert(1,y); } if(q==2){ } if(q==3) printf("%d\n",check(1,y)); if(q==4) printf("%d\n",check2(1,y,1)); if(q==5){ printf("%d\n",check3(1,y)); } if(q==6) { int k=check2(1,y,1); printf("%d\n",check(1,k-1)); } if(q==7) { int k=check2(1,y,1); printf("%d\n",check(1,k+1)); } } for(int i=1;i<=tot;i++){ // printf("%d \n",a[i].size); } }
二叉搜索树(模板)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。