二叉樹的集合操作

字號:

前段時間,我寫了一個關于鏈表的集合操作,能夠將鏈表、堆棧,隊列多種數(shù)據(jù)類型進行可重復的多種基本操作將鏈表深入的剖析了一番,這次,我花了點時間寫了一個關于二叉樹的集合操作的程序,它的主要功能是能夠創(chuàng)建一棵二叉樹,并且能夠將我們創(chuàng)建的這棵二叉樹用多種方式遍歷,例如:先根遍歷、中根遍歷、后跟遍歷,并且能夠隨時顯示我們的二叉樹的直觀構造,以及打印出我們的葉子結點,能夠隨時的釋放掉我們?yōu)槎鏄渌_辟的結點空間,然后自動的提示我們構造一棵新的二叉樹,能夠隨時的推出我們的當前程序,并且在結束當前程序的時候,能夠自動得釋放掉我們所有的節(jié)點空間。
    同時,本程序的自動糾錯功能也很不錯的,能夠糾出我們常見的容易忽視的錯誤,實現(xiàn)實時的檢查功能。
    本程序是經(jīng)過本人的精心設計和調試通過了的,要是大家對于二叉樹的概念和操作不是很熟悉的話,我想,通過仔細的揣摩本程序,定能夠替你解除心中的片片疑云。
    本人本著為大家闡釋清楚,不留疑慮,不留問題的的原則,特地附上一份詳細的實驗分析報告,大家仔細對照著著這個報告,結合源程序,一定能夠將二叉樹的關鍵技術搞的一清二楚!
    若是本程序有什么不到之處或是有什么好的建議,不妨和本人聯(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);
    }
    }