二叉樹的集合操作

字號(hào):

前段時(shí)間,我寫了一個(gè)關(guān)于鏈表的集合操作,能夠?qū)㈡湵?、堆棧,?duì)列多種數(shù)據(jù)類型進(jìn)行可重復(fù)的多種基本操作將鏈表深入的剖析了一番,這次,我花了點(diǎn)時(shí)間寫了一個(gè)關(guān)于二叉樹的集合操作的程序,它的主要功能是能夠創(chuàng)建一棵二叉樹,并且能夠?qū)⑽覀儎?chuàng)建的這棵二叉樹用多種方式遍歷,例如:先根遍歷、中根遍歷、后跟遍歷,并且能夠隨時(shí)顯示我們的二叉樹的直觀構(gòu)造,以及打印出我們的葉子結(jié)點(diǎn),能夠隨時(shí)的釋放掉我們?yōu)槎鏄渌_辟的結(jié)點(diǎn)空間,然后自動(dòng)的提示我們構(gòu)造一棵新的二叉樹,能夠隨時(shí)的推出我們的當(dāng)前程序,并且在結(jié)束當(dāng)前程序的時(shí)候,能夠自動(dòng)得釋放掉我們所有的節(jié)點(diǎn)空間。
    同時(shí),本程序的自動(dòng)糾錯(cuò)功能也很不錯(cuò)的,能夠糾出我們常見的容易忽視的錯(cuò)誤,實(shí)現(xiàn)實(shí)時(shí)的檢查功能。
    本程序是經(jīng)過本人的精心設(shè)計(jì)和調(diào)試通過了的,要是大家對(duì)于二叉樹的概念和操作不是很熟悉的話,我想,通過仔細(xì)的揣摩本程序,定能夠替你解除心中的片片疑云。
    本人本著為大家闡釋清楚,不留疑慮,不留問題的的原則,特地附上一份詳細(xì)的實(shí)驗(yàn)分析報(bào)告,大家仔細(xì)對(duì)照著著這個(gè)報(bào)告,結(jié)合源程序,一定能夠?qū)⒍鏄涞年P(guān)鍵技術(shù)搞的一清二楚!
    若是本程序有什么不到之處或是有什么好的建議,不妨和本人聯(lián)系,我的聯(lián)系方式是:
    QQ: 37170732 E-mail: owenstone@sina.com.cn
    歡迎各位愛好Windows編程和MFC編程愛好者加我!
    --------------------------------------以下是程序的代碼部分----------------------------------------
    #include
    #include
    #include
    #define NULL 0
    #define DataType char
    typedef struct BinTreeNode *PBinTreeNode;
    typedef PBinTreeNode *PBinTree;
    struct BinTreeNode
    { DataType info;
    PBinTreeNode llink;
    PBinTreeNode rlink;
    };
    PBinTreeNode Create_BinTree(void);
    PBinTree Create_BinTreeRoot(void)
    {PBinTree pbtree;
    pbtree=(PBinTree)malloc(sizeof(struct BinTreeNode));
    if(pbtree==NULL) pbtree=(PBinTree)realloc(pbtree,sizeof(struct BinTreeNode));
    *pbtree=Create_BinTree();
    return (pbtree);
    }
    PBinTreeNode Create_BinTreeNode(void)
    {PBinTreeNode pbnode;
    pbnode=(PBinTreeNode)malloc(sizeof(struct BinTreeNode));
    if(pbnode==NULL) pbnode=(PBinTreeNode)realloc(pbnode,sizeof(struct BinTreeNode));
    else pbnode->llink=pbnode->rlink=(PBinTreeNode)NULL;
    return (pbnode);
    }
    int isalphabet(char i)
    {
    if (i >= 'a' && i <='z' || i >= 'A' && i <='Z' || i=='@')
    return 1;
    else return 0;
    }
    PBinTreeNode Create_BinTree(void)
    {PBinTreeNode pbnode ;
    DataType i;
    printf("Please input a char:\t");
    fflush(stdin);
    scanf("%c",&i);
    fflush(stdin);
    while(!isalphabet(i))
    {
    printf("Sorry, your input char is not in alphabet, please input again:");
    scanf("%c",&i);
    fflush(stdin);
    }
    if(i=='@') pbnode= NULL;
    else
    {
    pbnode = (PBinTreeNode)malloc(sizeof(struct BinTreeNode));
    if(pbnode == NULL)
    {
    printf("Out of space!\n");
    return pbnode ;
    }
    pbnode->info=i;
    pbnode->llink=Create_BinTree();
    pbnode->rlink=Create_BinTree();
    }
    return pbnode;
    }
    void outputTree(PBinTreeNode pbnode,int totalSpace)
    {int i;
    if(pbnode!=NULL)
    {
    totalSpace+=5;
    outputTree(pbnode->rlink,totalSpace);
    for(i=0;i    printf("%c\n",pbnode->info);
    outputTree(pbnode->llink,totalSpace);
    }
    }