青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Just enjoy programming

二叉查找樹實(shí)現(xiàn)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*結(jié)構(gòu)體節(jié)點(diǎn)*/
typedef struct  _node{
    int key;
    struct _node *left;
    struct _node *right;
    struct _node *parent;
}node;


/*插入節(jié)點(diǎn)*/
void insert(node *root,node *toInsert)
{
    node *p,*q;
    p=root;
    q=NULL;
    if(toInsert==NULL || root==NULL)
    {
        return;
    }

    while(p!=NULL)
    {
        q=p;/*記錄父節(jié)點(diǎn)*/
        if(toInsert->key<p->key)
        {
            p=p->left;
        }else{
            p=p->right;
        }    
    }
    if(toInsert->key<q->key)
    {
        q->left=toInsert;
    }else{
        q->right=toInsert;
    }
    toInsert->parent=q;
    toInsert->left=NULL;
    toInsert->right=NULL;
}

/*遞歸中序遍歷根節(jié)點(diǎn)*/
void middleSearch(node *root)
{
    if(root!=NULL)
    {
        middleSearch(root->left);
        printf("%d\t",root->key);
        middleSearch(root->right);
    }
}
/*先序遍歷*/
void preSearch(node *root)
{
    if(root!=NULL)
    {
        printf("%d\t",root->key);
        preSearch(root->left);
        preSearch(root->right);
    }
}

/*查找返回節(jié)點(diǎn)關(guān)鍵字為key的節(jié)點(diǎn)*/
node* search(node *root,int key)
{
    node *p=root;
    while(p!=NULL)
    {
        if(key<p->key)
        {
            p=p->left;
        }else if(key>p->key)
        {
            p=p->right;
        }else
            break;
    }
    return p;
}

/*查找二叉樹最小值*/
node *minimun(node *root)
{
    node *p=root;
    if(p==NULL)
        return p;
    while(p->left!=NULL)
        p=p->left;
    printf("min %d\n",p->key);
    return p;
}

/*查找二叉樹最大值*/
node *maximun(node *root)
{
    node *p=root;
    if(p==NULL)
        return;
    while(p->right!=NULL)
        p=p->right;
    printf("max %d\n",p->key);
    return p;
}
/*找節(jié)點(diǎn)后續(xù)*/
node* successor(node *x)
{
    node *p;
    if(NULL==x)
        return x;
    if(x->right!=NULL)
        return minimun(x->right);
    p=x->parent;
    while(p!=NULL && p->right==x)
    {
        x=p;
        p=p->parent;
    }
    return p;
}

/*刪除節(jié)點(diǎn)*/
void delete(node *root,node *toDelete)
{
    node *p,*q;
    int key;
    if(root==NULL || toDelete==NULL)
        return ;
    p=toDelete->parent;

    /*第一種情況,要?jiǎng)h除的節(jié)點(diǎn)的左右子樹都為空*/
    if(toDelete->left ==NULL && toDelete->right ==NULL)
    {
        if(p==NULL)/*要?jiǎng)h除的是根節(jié)點(diǎn)*/
        {
            free(toDelete);
            return;
        }
        if(p->left==toDelete)
        {
            p->left=NULL;
        }else
            p->right=NULL;
        free(toDelete);

    }

    /*第二種情況,要?jiǎng)h除的左子樹為空,右子樹不為空*/
    else if(toDelete->left==NULL)
    {    
        if(p==NULL)
        {
            q=root->right;
            root->key=q->key;
            root->left=q->left;
            root->right=q->right;

            free(q);
            return;
        }
        else if(p->left==toDelete)
        {
            p->left=toDelete->right;
        }else
            p->right=toDelete->right;
        toDelete->right->parent=p;
        free(toDelete);
    }

    /* 第三種情況,要?jiǎng)h除的右子樹為空,左子樹不為空*/
    else if(toDelete->right==NULL)
    {
        if(p==NULL)
        {
            q=root->left;
            root->key=q->key;
            root->left=q->left;
            root->right=q->right;
            root->parent=NULL;
            free(q);
            return;
        }
        else if(p->left==toDelete)
        {
            p->left=toDelete->left;
        }else
            p->right=toDelete->right;
        toDelete->parent=p;
        free(toDelete);
    }

    /* 第四種情況,要?jiǎng)h除的左右子樹都不為空*/
    else{
            q=successor(toDelete);
            key=q->key;
            delete(root,q);
            toDelete->key=key;
    }
}

int main()
{
    node *root;

    int a[12]={15,5,3,12,10,13,6,7,16,20,18,23};
    node *toInsert;
    node *x,*y;
    int i;
    /*創(chuàng)建頭節(jié)點(diǎn)*/
    if((root=(node*)malloc(sizeof(node)))==NULL)
    {
        perror("malloc error");
        exit(1);
    }
    root->key=a[0];
    /*插入節(jié)點(diǎn)*/
    for(i=1;i<12;i++)
    {
        if((toInsert=(node*)malloc(sizeof(node)))==NULL)
        {
            perror("malloc error");
            exit(1);
        }
        toInsert->key=a[i];
        insert(root,toInsert);
    }

    /*中序遍歷*/
    middleSearch(root);
    printf("\n");
    /*先序遍歷*/
    preSearch(root);
    printf("\n");

    /*最大值*/
    maximun(root);
    /*最小值*/
    minimun(root);

    /*查找關(guān)鍵字節(jié)點(diǎn)及其前驅(qū)*/
    x=search(root,6);
    y=successor(x);
    if(y!=NULL)
        printf("節(jié)點(diǎn) 6 后驅(qū) %d\n",y->key);

    x=search(root,3);
    y=successor(x);
    if(y!=NULL)
        printf("節(jié)點(diǎn) 3 后驅(qū) %d\n",y->key);


    x=search(root,13);
    y=successor(x);
    if(y!=NULL)
        printf("節(jié)點(diǎn) 13 后驅(qū) %d\n",y->key);


    x=search(root,23);
    y=successor(x);
    if(y!=NULL)
        printf("節(jié)點(diǎn) 23 后驅(qū) %d\n",y->key);

    /*刪除節(jié)點(diǎn)*/
    printf("before delete the node\n");
    x=search(root,13);

    delete(root,x);
    printf("\nafter delete the node\n");
    
    printf("中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);

    if((toInsert=(node*)malloc(sizeof(node)))==NULL)
    {
        perror("malloc error");
        exit(1);
    }
    toInsert->key=13;
    insert(root,toInsert);
    printf("\n中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);


    printf("\nbefore delete the node\n");
    x=search(root,16);
    delete(root,x);
    printf("\nafter delete the node\n");
    printf("中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);

    if((toInsert=(node*)malloc(sizeof(node)))==NULL)
    {
        perror("malloc error");
        exit(1);
    }
    toInsert->key=16;
    insert(root,toInsert);
    printf("\n中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);

    printf("\nbefore delete the node\n");
    x=search(root,5);
    delete(root,x);
    printf("\nafter delete the node\n");
    printf("中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);
    if((toInsert=(node*)malloc(sizeof(node)))==NULL)
    {
        perror("malloc error");
        exit(1);
    }
    toInsert->key=5;
    insert(root,toInsert);

    printf("\n中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);

    printf("\nbefore delete the node\n");
    x=search(root,15);

    delete(root,x);
    printf("\nafter delete the node\n");
   
    printf("中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);

    printf("\n");


    printf("before delete the node\n");
    x=search(root,16);

    delete(root,x);
    printf("\nafter delete the node\n");
   
    printf("中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);
    printf("\n");



    printf("before delete the node\n");
    x=search(root,18);

    delete(root,x);
    printf("\nafter delete the node\n");
   
    printf("中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);
    printf("\n");

    printf("before delete the node\n");
    x=search(root,20);

    delete(root,x);
    printf("\nafter delete the node\n");
   
    printf("中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);
    printf("\n");


    printf("before delete the node\n");
    x=search(root,23);

    delete(root,x);
    printf("\nafter delete the node\n");
   
    printf("中序遍歷\n");
    middleSearch(root);
    printf("\n先序遍歷\n");
    preSearch(root);
    printf("\n");
}
 

posted on 2011-03-28 16:15 周強(qiáng) 閱讀(305) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 算法

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩天堂在线观看| 欧美成人a视频| 快播亚洲色图| 亚洲国产视频直播| 亚洲国产成人高清精品| 日韩网站在线看片你懂的| 亚洲综合色视频| 亚洲精品国产精品国自产观看浪潮 | 欧美国产国产综合| 欧美在线一二三| 欧美亚洲一级| 欧美亚洲综合网| 亚洲欧美综合国产精品一区| 亚洲欧美国产高清va在线播| 亚洲永久免费精品| 久久国产精品亚洲va麻豆| 久久精品免费看| 欧美激情一区二区三区在线视频| 亚洲精品欧美激情| 亚洲视频免费在线观看| 午夜亚洲福利| 欧美成年人视频网站| 亚洲精品老司机| 欧美一区二区三区四区在线 | 亚洲卡通欧美制服中文| 亚洲午夜在线观看| 欧美成人午夜免费视在线看片| 欧美色区777第一页| 国产中文一区| 午夜精品久久久久久久男人的天堂 | 亚洲伦理在线观看| 久久久国产精彩视频美女艺术照福利| 欧美成人高清| 久久久久久电影| 极品av少妇一区二区| 久久大逼视频| 国产精品久久二区二区| 亚洲免费一在线| 国产精品99久久久久久久女警| 国产精品综合| 亚洲精品一区二区三区婷婷月| 中文一区在线| 在线亚洲+欧美+日本专区| 亚洲综合视频一区| 久久精品国产69国产精品亚洲| 一本色道久久88亚洲综合88| 欧美一区二区精品| 在线成人小视频| 一本久久综合亚洲鲁鲁五月天| 影音先锋亚洲一区| 亚洲女爱视频在线| 最新成人在线| 免费永久网站黄欧美| 麻豆av一区二区三区| 国产精品女主播一区二区三区| 欧美伊人影院| 欧美理论电影网| 亚洲欧美色一区| 米奇777在线欧美播放| 亚洲男人天堂2024| 欧美成人午夜激情在线| 久久久99国产精品免费| 你懂的亚洲视频| 亚洲综合成人婷婷小说| 亚洲靠逼com| 日韩亚洲欧美高清| 久久久久久婷| 久久久久欧美精品| 国产精品v日韩精品v欧美精品网站| 久久偷窥视频| 国产精品久久久久7777婷婷| 欧美成人亚洲成人| 欧美视频在线观看| 91久久久久久| 最新国产精品拍自在线播放| 久久久久久夜| 亚洲电影免费观看高清完整版在线 | 亚洲国产成人不卡| 欧美日本韩国| 久久精品国产96久久久香蕉| 一区二区日韩欧美| 欧美国产第一页| 久久久久在线观看| 99热免费精品| 国产日本欧美一区二区三区| 久久亚洲精品欧美| 91久久香蕉国产日韩欧美9色| 久久国产欧美日韩精品| 国产资源精品在线观看| 久久精品一区蜜桃臀影院 | 亚洲伦理在线观看| 国产欧美婷婷中文| 久久精品中文字幕一区二区三区| 亚洲精品久久久久久下一站| 性欧美8khd高清极品| 一区二区在线视频| 久久福利资源站| 美女图片一区二区| 亚洲日本在线观看| 国产乱码精品一区二区三区忘忧草 | 巨胸喷奶水www久久久免费动漫| 亚洲一级一区| 午夜国产不卡在线观看视频| 亚洲一区在线观看视频| 99精品欧美一区二区三区| 亚洲视频大全| 久久精品视频免费播放| 久久精品卡一| 亚洲国产99精品国自产| 午夜宅男久久久| 宅男噜噜噜66一区二区| 亚洲视频高清| 欧美精品在线一区| 亚洲视频电影图片偷拍一区| 欧美诱惑福利视频| 亚洲激情第一区| 国产精品剧情在线亚洲| 午夜久久黄色| 欧美成人日本| 午夜在线精品偷拍| 这里只有精品视频| 精品1区2区3区4区| 国产精品婷婷午夜在线观看| 久久手机精品视频| 99亚洲一区二区| 久久精品视频播放| 亚洲深夜福利网站| 日韩午夜黄色| 国产在线拍偷自揄拍精品| 欧美日韩国产系列| 欧美国产一区视频在线观看| 中文亚洲视频在线| 午夜精品美女自拍福到在线| 女生裸体视频一区二区三区| 欧美va天堂va视频va在线| 欧美在线视屏| 久久精品一区| 亚洲国产一区视频| 久久伊伊香蕉| 国产精品久久久久久久久久尿| 欧美国产日韩二区| 久久成人免费电影| 久久久噜噜噜久久中文字免| 亚洲日本中文| 国产日韩欧美一区在线| 午夜欧美视频| 日韩一级大片| 亚洲综合色激情五月| 国产精品人人爽人人做我的可爱| 在线亚洲一区二区| 亚洲欧美韩国| av72成人在线| 午夜精品久久久99热福利| 国产精品私房写真福利视频| 亚洲在线观看| 免费中文字幕日韩欧美| 亚洲激情不卡| 国产精品成人播放| 亚洲欧美电影院| 女同性一区二区三区人了人一| 亚洲春色另类小说| 欧美日韩国产电影| 欧美一区二区视频网站| 免费观看日韩av| 亚洲一区二区三区乱码aⅴ| 国产精品永久免费视频| 久久久夜色精品亚洲| 91久久精品一区二区三区| 亚洲欧美日韩精品综合在线观看| 国产欧美日韩视频| 欧美成人午夜视频| 羞羞色国产精品| 91久久精品www人人做人人爽| 欧美亚洲网站| 亚洲高清av| 国产亚洲女人久久久久毛片| 男女av一区三区二区色多| 亚洲视频网在线直播| 久色婷婷小香蕉久久| 亚洲一区二区av电影| 亚洲激情一区| 国产一区美女| 欧美视频四区| 美女亚洲精品| 欧美专区亚洲专区| 一本色道久久综合亚洲精品不卡 | 欧美国产日韩一区二区| 亚洲欧美国产日韩天堂区| 欧美激情国产精品| 久久国产欧美精品| 在线综合+亚洲+欧美中文字幕| 国产专区精品视频| 国产精品免费一区二区三区观看| 欧美不卡视频一区发布| 欧美亚洲免费高清在线观看| 亚洲精品一区二区三区av| 欧美承认网站| 欧美91精品| 欧美电影资源| 欧美福利精品|