我的代码风格

额……这个问题……

就用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;
}

言简意赅,是不是??

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

转载于:https://www.cnblogs.com/Garbage-Only-one/p/10697404.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值