• <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)
            亚洲国产成人久久综合碰碰动漫3d | 久久人人爽人人人人爽AV | 国产一区二区三区久久精品| 成人a毛片久久免费播放| 99久久这里只精品国产免费| 久久久精品2019免费观看| 久久精品国产精品亚洲人人 | 99久久无色码中文字幕人妻| 精品久久一区二区三区| 久久婷婷是五月综合色狠狠| 精品久久久久香蕉网| 亚洲国产成人久久综合碰| 久久综合久久综合九色| 久久天天躁狠狠躁夜夜96流白浆| 久久久久久毛片免费看| 久久香蕉一级毛片| 国产午夜免费高清久久影院| 久久久久波多野结衣高潮| 久久免费99精品国产自在现线| 国产精品久久久久久久久免费| 99精品久久精品一区二区| 亚洲精品国产综合久久一线| 国产成人AV综合久久| 夜夜亚洲天天久久| 国产精品久久亚洲不卡动漫| 亚洲国产精品无码久久久不卡| 国内精品久久久久影院老司| 精品水蜜桃久久久久久久| 日本免费一区二区久久人人澡 | 国内精品久久久久影院网站| 久久91综合国产91久久精品| 国产精品福利一区二区久久| 国产成年无码久久久久毛片| 国产精品美女久久久久久2018| 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | 久久久久久国产精品免费免费| 成人午夜精品久久久久久久小说 | 国内精品久久久久影院薰衣草| 99久久99久久精品国产片果冻 | 中文字幕无码久久久| 久久久久久久久久久精品尤物|