• 我的代码风格


    额……这个问题……

    就用BST模板(这真的是我写的比较得意的模板)说吧……

    代码上来了!!

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int ROOT=1;
    struct tree{
        int data;
        int l,r;
    	int fa;
    	tree(const int _data=-1,const int _l=-1,const int _r=-1,const int _fa=-1)
    	{
    	    data=_data;
    	    l=_l;
    	    r=_r;
    	    fa=_fa;
    	}
    }a[40000];
    /*========插入========*/
    void into(int sum,int now,int tot)
    {
        if(sum<a[now].data)
            if(a[now].l!=-1)
                into(sum,a[now].l,tot);
            else {
                a[now].l=tot;
                a[a[now].l].data=sum;
    			a[a[now].l].fa=now;
    //          cout<<"l:"<<a[a[now].l].data<<" ";
            }
        else if(sum>a[now].data)
            if(a[now].r!=-1)
                into(sum,a[now].r,tot);
            else {
                a[now].r=tot;
                a[a[now].r].data=sum;
    			a[a[now].r].fa=now;
    //          cout<<"r:"<<a[a[now].r].data<<" ";
            }
    }
    /*========查找========*/
    int find(int now,int sum)
    {
    //	cout<<now<<endl;
        if(a[now].data==sum) return now;
        if(sum<a[now].data)
            if(a[now].l!=-1) return find(a[now].l,sum);
            else return 0;
        else if(sum>a[now].data)
            if(a[now].r!=-1) return find(a[now].r,sum);
            else return 0;
    }
    void init2()
    {
        cin>>n;
        int i,x;
        for(i=1;i<=n;i++){
            cin>>x;
            if(find(ROOT,x)) printf("Yes
    ");
            else printf("No
    ");
        }
    }
    /*========前驱========*/
    int pred(int now)
    {
    	if(a[now].r!=-1) return pred(a[now].r);
    	else return now;
    }
    /*========删除========*/
    bool Delete(int now)
    {
    	if(a[now].r==-1&&a[now].l==-1){
    		if(a[a[now].fa].l==now) a[a[now].fa].l=-1;
    		if(a[a[now].fa].r==now) a[a[now].fa].r=-1;
    		return 1;
    	}
    	else if(a[now].l!=-1&&a[now].r==-1){
    		if(a[a[now].fa].l==now){
    			a[a[now].fa].l=a[now].l;
    			a[a[now].l].fa=a[now].fa;
    		}
    		if(a[a[now].fa].r==now){
    			a[a[now].fa].r=a[now].l;
    			a[a[now].r].fa=a[now].fa;
    		}
    		return 1;
    	}
    	else if(a[now].l==-1&&a[now].r!=-1){
    		if(a[a[now].fa].l==now){
    			a[a[now].fa].l=a[now].r;
    			a[a[now].l].fa=a[now].fa;
    		}
    		if(a[a[now].fa].r==now){
    			a[a[now].fa].r=a[now].r;
    			a[a[now].r].fa=a[now].fa;
    		}
    		return 1;
    	}
    	else if(a[now].l!=-1&&a[now].r!=-1){
    		int left=a[now].l;
    		int rep=pred(left);
    		if(a[a[now].fa].l==now){
    			Delete(rep);
    			a[a[now].fa].l=rep;
    			a[rep].l=a[now].l;
    			a[a[now].l].fa=rep;
    			a[rep].r=a[now].r;
    			a[a[now].r].fa=rep;
    		}
    		else if(a[a[now].fa].r==now){
    			Delete(rep);
    			a[a[now].fa].r=rep;
    			a[rep].l=a[now].r;
    			a[a[now].l].fa=rep;
    			a[rep].r=a[now].r;
    			a[a[now].r].fa=rep;
    		}
    		else {
    			Delete(rep);
    			ROOT=rep;
    			if(a[now].l!=-1){
    				a[rep].l=a[now].l;
    				a[a[now].l].fa=rep;
    			}
    			if(a[now].r!=-1){
    				a[rep].r=a[now].r;
    				a[a[now].r].fa=rep;
    			}
    		}
    		return 1;
    	}
    	return 0;
    }
    void init3()
    {
    	cin>>n;
    	int i,x;
    	for(i=1;i<=n;i++){
    		cin>>x;
    		int now=find(ROOT,x);
    //    	cout<<now<<endl;
    		if(now==0) printf("No number!
    ");
    		else {
    			if(Delete(now))
    			    printf("%d has now been deleted.
    ",x);
    			else printf("...");
    		}
    	}
    }
    /*========构建========*/
    void init()
    {
        cin>>n;
        int x,tot;
        for(tot=1;tot<=n;tot++){
            scanf("%d",&x);
            if(tot==1)
                a[tot].data=x;
            else
                into(x,1,tot);
        }
    //  cout<<endl;
    }
    /*========遍历========*/
    void bl(int how,int now)
    {
        if(how==1){
            cout<<a[now].data<<" ";
            if(a[now].l!=-1)
                bl(1,a[now].l);
            if(a[now].r!=-1)
                bl(1,a[now].r);
        }
        if(how==2){
            if(a[now].l!=-1)
                bl(2,a[now].l);
            cout<<a[now].data<<" ";
            if(a[now].r!=-1)
                bl(2,a[now].r);
        }
        if(how==3){
            if(a[now].l!=-1)
                bl(3,a[now].l);
            if(a[now].r!=-1)
                bl(3,a[now].r);
            cout<<a[now].data<<" ";
        }
    }
    int main()
    {
        freopen("BST.in","r",stdin);
        freopen("BST.out","w",stdout);
        init();
        bl(1,ROOT);
        printf("
    ");
        bl(2,ROOT);
        printf("
    ");
        bl(3,ROOT);
    	printf("
    ");
        init2();
    	init3();
    	bl(1,ROOT);
        printf("
    ");
        bl(2,ROOT);
        printf("
    ");
        bl(3,ROOT);
    	printf("
    ");
    	return 0;
    }
    

    言简意赅,是不是??

    还有,一些适当的注释(不要多了)可以帮助自己与别人更好的理解!

  • 相关阅读:
    归并排序
    快速排序
    UNION与UNION ALL的区别
    聚集索引和非聚集索引
    设计模式之抽象工厂模式
    list中map 的value值时间排序
    webmvc 拦截器 允许跨域 跨域问题 sessionid不一样
    redis 主从复制 和集群
    maven打包
    bcprov-jdk15on包用于创建CSR(证书请求)
  • 原文地址:https://www.cnblogs.com/Garbage-Only-one/p/10697404.html
Copyright © 2020-2023  润新知