• <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>
            /*
              Name: 已知中序與后序,或者中序與先序,構(gòu)造二叉樹(shù)
              Copyright: 始發(fā)于goal00001111的專(zhuān)欄;允許自由轉(zhuǎn)載,但必須注明作者和出處
              Author: goal00001111
              Date: 08-12-08 11:42
              Description:
            描述 Description      
            給出一棵二叉樹(shù)的中序與后序排列。求出它的先序排列。
            給出一棵二叉樹(shù)的中序與先序排列。求出它的后序排列。
            */

            #include<iostream>
            #include<string>

            using namespace std;

            typedef struct BTNode{
                  char data;
                  struct BTNode *lc, *rc;//左,右孩子指針
            } *BTree;

            void PostBtree(BTree & t, string mid, string post, int lm, int rm, int lp, int rp);
            void PreBtree(BTree & t, string mid, string pre, int lm, int rm, int lp, int rp);
            void Preorder(BTree p);  //先序遍歷
            void Postorder(BTree p); //后序遍歷

            int main(int argc, char* argv[])
            {
                string pre, mid, post;
                BTree root1, root2;
                
                cout << "輸入中序序列" << endl;
                cin >> mid;
                cout << "輸入后序序列" << endl;
                cin >> post;
                PostBtree(root1, mid, post, 0, mid.size()-1, 0, post.size()-1);
                Preorder(root1);
                cout << endl;
                
                cout << "輸入前序序列" << endl;
                cin >> pre;
                PreBtree(root2, mid, pre, 0, mid.size()-1, 0, pre.size()-1);
                Postorder(root2);
                
                system("pause");
                return 0;
            }

            /*
            函數(shù)名稱(chēng):PostBtree
            函數(shù)功能:給出一棵二叉樹(shù)的中序與后序序列,構(gòu)造這棵二叉樹(shù)。
            輸入?yún)?shù): BTree & t:二叉樹(shù)的結(jié)點(diǎn)t
                      string mid:存儲(chǔ)了二叉樹(shù)的中序序列的字符串
                      string post:存儲(chǔ)了二叉樹(shù)的后序序列的字符串
                      int lm, int rm:二叉樹(shù)的中序序列在數(shù)組mid中的左右邊界
                      int lp, int rp:二叉樹(shù)的后序序列在數(shù)組post中的左右邊界
            */
            void PostBtree(BTree & t, string mid, string post, int lm, int rm, int lp, int rp)
            {
                t = new BTNode; //構(gòu)造二叉樹(shù)根結(jié)點(diǎn)
                t->data = post[rp];
                t->lc = t->rc = NULL;
                
                int pos = lm;
                while (mid[pos] != post[rp])
                    pos++;
                int lenL = pos - lm;
                if (pos > lm)//有左孩子,遞歸構(gòu)造左子樹(shù)
                    PostBtree(t->lc, mid, post, lm, pos-1, lp, lp+lenL-1);
                if (pos < rm)//有右孩子,遞歸構(gòu)造右子樹(shù)
                    PostBtree(t->rc, mid, post, pos+1, rm, lp+lenL, rp-1);
            }
            /*
            函數(shù)名稱(chēng):PreBtree
            函數(shù)功能:給出一棵二叉樹(shù)的中序與先序序列,構(gòu)造這棵二叉樹(shù)。
            輸入?yún)?shù): BTree & t:二叉樹(shù)的結(jié)點(diǎn)t
                      string mid:存儲(chǔ)了二叉樹(shù)的中序序列的字符串
                      string pre:存儲(chǔ)了二叉樹(shù)的先序序列的字符串
                      int lm, int rm:二叉樹(shù)的中序序列在數(shù)組mid中的左右邊界
                      int lp, int rp:二叉樹(shù)的先序序列在數(shù)組post中的左右邊界
            */
            void PreBtree(BTree & t, string mid, string pre, int lm, int rm, int lp, int rp)
            {
                t = new BTNode; //構(gòu)造二叉樹(shù)根結(jié)點(diǎn)
                t->data = pre[lp];
                t->lc = t->rc = NULL;
                
                int pos = lm;
                while (mid[pos] != pre[lp])
                    pos++;
                int lenL = pos - lm;
                if (pos > lm)//有左孩子,遞歸構(gòu)造左子樹(shù)
                    PreBtree(t->lc, mid, pre, lm, pos-1, lp+1, lp+lenL);
                if (pos < rm)//有右孩子,遞歸構(gòu)造右子樹(shù)
                    PreBtree(t->rc, mid, pre, pos+1, rm, lp+lenL+1, rp);
            }

            //先序遍歷
            void Preorder(BTree p)
            {
                if(p != NULL)
                {
                    cout << p->data; //輸出該結(jié)點(diǎn)
                    Preorder(p->lc); //遍歷左子樹(shù)
                    Preorder(p->rc); //遍歷右子樹(shù)
                }
            }

            //后序遍歷
            void Postorder(BTree p)
            {
                if(p != NULL)
                {
                    Postorder(p->lc); //遍歷左子樹(shù)
                    Postorder(p->rc); //遍歷右子樹(shù)
                    cout << p->data; //輸出該結(jié)點(diǎn)
                }
            }
            Posted on 2008-12-11 12:25 夢(mèng)想飛揚(yáng) 閱讀(1806) 評(píng)論(1)  編輯 收藏 引用

            Feedback

            # re: 已知中序與后序,或者中序與先序,構(gòu)造二叉樹(shù)  回復(fù)  更多評(píng)論   

            2009-04-25 22:46 by zhm
            為什么不能在eclipse上面運(yùn)行呢?

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久精品?ⅴ无码中文字幕| 国内精品久久九九国产精品| 久久婷婷五月综合97色| 伊人久久一区二区三区无码| 欧美亚洲另类久久综合| 中文字幕乱码久久午夜| 久久青青草原精品国产软件| 久久久久18| 久久国产成人| 女同久久| 四虎影视久久久免费观看| 日韩美女18网站久久精品| 久久久久夜夜夜精品国产| 日本精品久久久久中文字幕| 久久免费高清视频| 国产精品内射久久久久欢欢 | 国产成人无码精品久久久久免费 | 久久最新免费视频| 国产欧美久久久精品影院| 99久久国产亚洲综合精品| 伊人久久大香线蕉av一区| 99久久精品午夜一区二区| 99久久国产亚洲高清观看2024 | 久久本道久久综合伊人| 中文字幕久久亚洲一区| A级毛片无码久久精品免费| 久久丫精品国产亚洲av不卡| 久久久中文字幕| 综合久久一区二区三区 | 香蕉久久夜色精品升级完成| 精品人妻久久久久久888| 999久久久免费国产精品播放| 久久天天躁狠狠躁夜夜2020| 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品黄AA片一区二区三区| 色综合色天天久久婷婷基地| yy6080久久| 久久久青草青青国产亚洲免观| 久久久久久午夜成人影院| 久久久久久久综合日本| jizzjizz国产精品久久|