• <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)
            免费精品久久天干天干| 日日噜噜夜夜狠狠久久丁香五月 | AAA级久久久精品无码区| 国产精品一区二区久久| 办公室久久精品| 亚洲中文字幕伊人久久无码| 久久精品九九亚洲精品| 久久久久国产精品麻豆AR影院 | 亚洲人成精品久久久久| 久久久久高潮毛片免费全部播放| 国内精品久久久久久不卡影院| 久久人人爽人人爽人人av东京热| 久久99免费视频| 日韩人妻无码精品久久久不卡| 国产精品日韩欧美久久综合| 无码人妻精品一区二区三区久久| 久久久WWW免费人成精品| 久久久久亚洲AV无码麻豆| 久久国产精品一区| 久久综合久久综合九色| 色偷偷88888欧美精品久久久| 久久影院久久香蕉国产线看观看| 久久99国产精品一区二区| 欧美日韩久久中文字幕| 久久天天躁狠狠躁夜夜不卡 | 性欧美大战久久久久久久| 热99re久久国超精品首页| 天天爽天天狠久久久综合麻豆| 久久亚洲sm情趣捆绑调教| 亚洲国产香蕉人人爽成AV片久久| 国产女人aaa级久久久级| 国内精品久久九九国产精品| 99久久综合狠狠综合久久止| 国内精品人妻无码久久久影院导航| 午夜精品久久久久久久无码| 亚洲精品久久久www| 国产精品美女久久福利网站| 人人妻久久人人澡人人爽人人精品| 色狠狠久久综合网| 亚洲中文字幕无码一久久区| 亚洲国产美女精品久久久久∴|