用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

高级二叉树

2017-09-14 作者:云代码会员举报

[c++]代码库

#include<stdio.h>
#include<stdlib.h>
typedef struct Bitree
{
    int key;
    struct Bitree *lchild,*rchild;
}Bitnode,*Bitree;
bool Search(Bitree T,int key,Bitree f,Bitree *p)
{
    if(T==NULL)
    {
        *p=f;
        return false;
    }
    else if(key==T->key)
        {
            *p=T;
            return true;
        }
        else if(key<T->key)
            {
                Search(T->lchild,key,T,p);
            }
        else
            Search(T->rchild,key,T,p);
}
void CreateTree(Bitree *T,int n)
{
    int i,index;
    Bitree p,s;
    printf("请输入排序二叉树的关键字序列:");
    for(i=1;i<=n;i++)
    {

        scanf("%d",&index);
        if(!Search(*T,index,NULL,&p))
        {
            s=(Bitree)malloc(sizeof(Bitnode));
            s->key=index;
            s->lchild=NULL;
            s->rchild=NULL;
            if(!p)
                *T=s;
            else
                if(index<p->key)
                p->lchild=s;
            else
                p->rchild=s;
        }
    }
}
void VisitBitree(Bitree T)
{
    if(T)
    {
        VisitBitree(T->lchild);
        printf("%d->",T->key);
        VisitBitree(T->rchild);
    }

}
void Delete(Bitree &p)
{

    Bitree q,s;
    if(!p->rchild)
    {
        q=p;
        p=p->lchild;
        free(q);
    }
    if(!p->lchild)
    {
        q=p;
        p=p->rchild;
        free(q);
    }
    else
    {
        q=p;
        s=p->lchild;
        while(s->rchild)
        {
            q=s;
            s=s->lchild;
        }
        p->key=s->key;
        if(q!=p)
        {
           q->rchild=s->lchild;
        }
        else
            q->lchild=s->lchild;
    }
}
bool DeleteB(Bitree *T,int x)
{
    if(!T)
        return false;
    else
    {
        if(x==T->key)
        {
            Delete(T);
            return true;
        }
        else if(x<T->key)
            DeleteB(T->lchild,x);
        else
            DeleteB(T->rchild,x);
    }
}
int main()
{
    int n,x;
    Bitree T=NULL;
    printf("请输入排序树序列元素个数:\n");
    scanf("%d",&n);
    CreateTree(&T,n);

    printf("排序树序列中根访问序列:\n");
    VisitBitree(T);
    printf("\n");

    printf("输入你要删除的元素:");
    scanf("%d",&x);
    if(DeleteB(T,x))
    {
        printf("排序树修改后的序列中根访问序列如下:\n");
        VisitBitree(T);
        printf("\n");

    }
    else
        printf("删除失败!该元素不在序列中\n");
}


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。