• <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>
            posts - 100,  comments - 15,  trackbacks - 0
            輸入二叉樹(shù)先序,建樹(shù),然后中序線索化,遍歷輸出
              1#include<iostream>
              2using namespace std;
              3
              4enum PointerTag
              5
              6    Link,Thread        //枚舉值Link和Thread分別為0,1
              7}

              8
              9struct BiThrNode    //線索二叉樹(shù)的結(jié)點(diǎn)類型
             10{
             11    char data;
             12    PointerTag LTag;    //左標(biāo)志
             13    PointerTag RTag;    //右標(biāo)志
             14    BiThrNode *lchild;    //左孩子指針
             15    BiThrNode *rchild;    //右孩子指針
             16}
            ;
             17
             18typedef BiThrNode* BiThrTree;
             19BiThrNode *pre=NULL; //全局量
             20
             21void InOrderThreading(BiThrTree & Thrt,BiThrTree T);//線索化
             22void InThreading(BiThrTree p);//中序遍歷線索化
             23bool PreOrderCreatBiTree(BiThrTree &T);//先序建立樹(shù)
             24void InOrderTraverse_Thr(BiThrTree T);//中序遍歷線索樹(shù)
             25
             26int main()
             27{
             28    BiThrTree T,Thrt;
             29    printf("輸入先序序列('#'表示空節(jié)點(diǎn))建立二叉樹(shù):\n");
             30    PreOrderCreatBiTree(T);//先序建立樹(shù)
             31    InOrderThreading(Thrt,T);//中序線索化
             32    printf("中序線索化,中序遍歷得中綴式:\n");
             33    InOrderTraverse_Thr(Thrt);//中序遍歷線索樹(shù)
             34    printf("\n");
             35    return 0;
             36}

             37
             38void InOrderThreading(BiThrTree & Thrt,BiThrTree T)
             39{
             40    Thrt=new BiThrNode;
             41    Thrt->LTag=Link;
             42    Thrt->RTag=Thread;
             43    Thrt->rchild=Thrt;
             44    if(!T) Thrt->lchild=Thrt;
             45    else{
             46        Thrt->lchild=T;
             47        pre=Thrt;
             48        InThreading(T);
             49        pre->rchild=Thrt;
             50        pre->RTag=Thread;
             51        Thrt->rchild=pre;
             52    }

             53}

             54
             55void InThreading(BiThrTree p)
             56{
             57    if(p)
             58    {
             59        InThreading(p->lchild);
             60        if(!p->lchild){ p->LTag=Thread; p->lchild=pre;}
             61        if(!pre->rchild){ pre->RTag=Thread; pre->rchild=p; }
             62        pre=p;
             63        InThreading(p->rchild);
             64    }

             65}

             66
             67bool PreOrderCreatBiTree(BiThrTree &T)
             68{//該節(jié)點(diǎn)非空返回true,雙親節(jié)點(diǎn)對(duì)應(yīng)標(biāo)志Link,空時(shí)返回false,雙親節(jié)點(diǎn)對(duì)應(yīng)標(biāo)志應(yīng)為Thread
             69    char ch;
             70    scanf("%c",&ch);
             71    if(ch=='#')
             72    {
             73        T=NULL;
             74        return false;
             75    }
            else {
             76        T=new BiThrNode;
             77        T->data=ch;
             78        if(PreOrderCreatBiTree(T->lchild)) T->LTag=Link;    //左孩子存在則左標(biāo)志為L(zhǎng)ink
             79        else T->LTag=Thread;
             80        if(PreOrderCreatBiTree(T->rchild)) T->RTag=Link;    //右孩子存在則右標(biāo)志為L(zhǎng)ink
             81        else T->RTag=Thread;
             82    }

             83    return true;
             84}

             85
             86
             87void InOrderTraverse_Thr(BiThrTree T)
             88{
             89    BiThrNode *p;
             90    p=T->lchild;
             91    while(p!=T)
             92    {
             93        while(p->LTag==Link) p=p->lchild;
             94        printf("%c",p->data);
             95        while(p->RTag==Thread && p->rchild!=T) //if(p->RTag==Thread && p->rchild!=T)
             96        {
             97            p=p->rchild;
             98            printf("%c",p->data);
             99        }

            100        p=p->rchild;
            101    }

            102}
            posted on 2009-05-13 17:00 wyiu 閱讀(628) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)
            精品久久久久久中文字幕大豆网| 欧美久久综合性欧美| 日韩中文久久| 伊人久久大香线蕉av不卡| 国产精品18久久久久久vr| 91久久国产视频| 思思久久精品在热线热| 99久久国产热无码精品免费| 99久久精品无码一区二区毛片| 色欲综合久久躁天天躁| jizzjizz国产精品久久| 狠狠色丁香久久婷婷综合蜜芽五月 | 久久中文骚妇内射| 国产69精品久久久久99| 久久国产免费观看精品3| 久久精品国产一区二区电影| 老色鬼久久亚洲AV综合| 久久久久国产一区二区| 国产69精品久久久久777| 日本精品久久久久影院日本| 亚洲国产天堂久久综合网站| 久久久久久亚洲Av无码精品专口 | 精品免费久久久久久久| 伊人久久大香线蕉综合热线| 免费国产99久久久香蕉| 国产韩国精品一区二区三区久久| 精品国产青草久久久久福利| 伊人久久成人成综合网222| 久久996热精品xxxx| 青青青伊人色综合久久| 国产精品久久久久9999| 99精品久久精品一区二区| 久久亚洲精品国产精品| 一本色综合网久久| 亚洲∧v久久久无码精品| 精品综合久久久久久97| 亚洲第一极品精品无码久久| 三上悠亚久久精品| 久久精品国产亚洲AV无码麻豆| 久久久久亚洲AV片无码下载蜜桃| 久久久久人妻精品一区|