我的代码风格

额……这个问题……

就用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\n");
        else printf("No\n");
    }
}
/*========前驱========*/
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!\n");
		else {
			if(Delete(now))
			    printf("%d has now been deleted.\n",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("\n");
    bl(2,ROOT);
    printf("\n");
    bl(3,ROOT);
	printf("\n");
    init2();
	init3();
	bl(1,ROOT);
    printf("\n");
    bl(2,ROOT);
    printf("\n");
    bl(3,ROOT);
	printf("\n");
	return 0;
}

言简意赅,是不是??

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

posted @ 2019-04-12 17:31  Garbage-Only-One  阅读(203)  评论(0编辑  收藏  举报