zoukankan      html  css  js  c++  java
  • 二叉搜索树(模板)

    #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
    ",check(1,y));
    		if(q==4)
    		printf("%d
    ",check2(1,y,1));
    		if(q==5){
    			printf("%d
    ",check3(1,y)); 
    		}
    		if(q==6)
    		{
    			int k=check2(1,y,1);
    			printf("%d
    ",check(1,k-1));
    		}
    		if(q==7)
    		{
    			int k=check2(1,y,1);
    			printf("%d
    ",check(1,k+1));
    		}
    	}
    	for(int i=1;i<=tot;i++){
    	//	printf("%d 
    ",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
    ",check(1,y));
            if(q==4)
            printf("%d
    ",check2(1,y,1));
            if(q==5){
                printf("%d
    ",check3(1,y)); 
            }
            if(q==6)
            {
                int k=check2(1,y,1);
                printf("%d
    ",check(1,k-1));
            }
            if(q==7)
            {
                int k=check2(1,y,1);
                printf("%d
    ",check(1,k+1));
            }
        }
        for(int i=1;i<=tot;i++){
        //    printf("%d 
    ",a[i].size);
        }
    }
  • 相关阅读:
    Anti-Aliasing SSAA MSAA MLAA SRAA 简介
    开源二维码QR CODE编码/解码 识别 库
    Shadow Map阴影贴图技术之探
    3D场景的制作步骤
    python实现对excel数据进行修改/添加
    selenium3 + python 爬虫
    Mock实现模拟python的对象
    Moco模拟服务器实现请求&响应 (一)
    python之Beautiflusoup操作
    python使用ddt模块对用例执行操作
  • 原文地址:https://www.cnblogs.com/wspl98765/p/6820305.html
Copyright © 2011-2022 走看看