• <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>
            隨筆 - 8  文章 - 26  trackbacks - 0
            <2009年9月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            常用鏈接

            留言簿(5)

            隨筆檔案

            文章分類

            文章檔案

            相冊

            C++語言

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            二叉樹實現(xiàn)(主要是為了實現(xiàn)二叉搜索樹時作為其父類)
              1//實現(xiàn)二叉樹數(shù)據(jù)結(jié)構(gòu)
              2#ifndef BINTREE_H
              3#define BINTREE_H
              4
              5
              6//定義節(jié)點結(jié)構(gòu)
              7template<class T>
              8class BinTreeNode
              9{
             10public:
             11    BinTreeNode(const T &e,BinTreeNode<T> *l=0,BinTreeNode<T> *r=0)
             12    {
             13    data=e;
             14    LeftChild=l;
             15    RightChild=r;
             16        }

             17
             18
             19public:
             20    T data;
             21    BinTreeNode<T> *LeftChild,
             22                   *RightChild;
             23    
             24}
            ;
             25
             26
             27//定義BinTree數(shù)據(jù)結(jié)構(gòu)
             28template<class E>//K關(guān)鍵子類型,E元素類型
             29class BinTree
             30{
             31public:
             32    BinTree(BinTreeNode<E>*r=0){root=r;}
             33    virtual ~BinTree();
             34
             35//BinTree<K,E>& Insert(E &e);//插入新元素
             36//BinTree<K,E>& Delete(K &k);//根據(jù)關(guān)鍵字進行刪除
             37
             38    BinTree<E>& MeldTree(const E &e,BinTree<E>& left,BinTree<E>& right);//合并兩棵樹
             39void BreakTree(E &e,BinTree<E>& left,BinTree<E>& right);//拆開兩棵樹
             40
             41void PreOrderVisit(void (*visit)(BinTreeNode<E> *node));//前序遍歷
             42void InOrderVisit(void (*visit)(BinTreeNode<E> *node));//中序遍歷
             43void PostOrderVisit(void (*visit)(BinTreeNode<E> *node));//后序遍歷
             44
             45int Height(){return height(root);};//返回樹的高度
             46
             47
             48protected:
             49
             50     void PreOrderVisit(BinTreeNode<E> *t,void (*visit)(BinTreeNode<E> *node));
             51     void InOrderVisit(BinTreeNode<E> *t,void (*visit)(BinTreeNode<E> *node));
             52     void PostOrderVisit(BinTreeNode<E> *t,void (*visit)(BinTreeNode<E> *node));
             53     static void Free(BinTreeNode<E> *node){delete node;}
             54     int height(BinTreeNode<E>*t);
             55     int leaves(BinTreeNode<E>*t);
             56protected:
             57    BinTreeNode<E> *root;//根節(jié)點指針
             58
             59}
            ;
             60
             61//---------------------------------------------------------------
             62template<class E>
             63BinTree<E>& BinTree<E>::MeldTree(const E &e,BinTree<E>& left,BinTree<E>& right)//合并兩棵樹
             64{
             65BinTreeNode<E> *NewNode=new BinTreeNode<E>(e,left.root,right.root);
             66root=NewNode;
             67left.root=right.root=0;
             68return *this;
             69}

             70
             71//---------------------------------------------------------------
             72template<class E>
             73void BinTree<E>::BreakTree(E &e,BinTree<E>& left,BinTree<E>& right)
             74{
             75
             76e=root->data;
             77left.root=root->LeftChild;
             78right.root=root->RightChild;
             79delete root;
             80root=0;
             81}

             82
             83//---------------------------------------------------------------
             84template<class E>
             85void BinTree<E>::PreOrderVisit(void (*visit)(BinTreeNode<E> *node))
             86{
             87PreOrderVisit(root,visit);
             88}

             89//---------------------------------------------------------------
             90template<class E>
             91void BinTree<E>::InOrderVisit(void (*visit)(BinTreeNode<E> *node))
             92{
             93InOrderVisit(root,visit);
             94}

             95//---------------------------------------------------------------
             96template<class E>
             97void BinTree<E>::PostOrderVisit(void (*visit)(BinTreeNode<E> *node))
             98{
             99PostOrderVisit(root,visit);
            100}

            101//---------------------------------------------------------------
            102template<class E>
            103    void BinTree<E>::PreOrderVisit(BinTreeNode<E> *t,void (*visit)(BinTreeNode<E> *node))
            104{
            105if(t)
            106{
            107visit(t);
            108PreOrderVisit(t->LeftChild,visit);
            109PreOrderVisit(t->RightChild,visit);
            110}

            111
            112}

            113//---------------------------------------------------------------
            114template<class E>
            115    void BinTree<E>::InOrderVisit(BinTreeNode<E> *t,void (*visit)(BinTreeNode<E> *node))
            116{
            117if(t)
            118{
            119InOrderVisit(t->LeftChild,visit);
            120visit(t);
            121InOrderVisit(t->RightChild,visit);
            122}

            123
            124
            125}

            126//---------------------------------------------------------------
            127template<class E>
            128    void BinTree<E>::PostOrderVisit(BinTreeNode<E> *t,void (*visit)(BinTreeNode<E> *node))
            129{
            130if(t)
            131{
            132    PostOrderVisit(t->LeftChild,visit);
            133    PostOrderVisit(t->RightChild,visit);
            134    visit(t);
            135}

            136}

            137//---------------------------------------------------------------
            138template<class E>
            139BinTree<E>::~BinTree()
            140{
            141PostOrderVisit(Free);
            142}

            143
            144//---------------------------------------------------------------
            145template<class E>
            146int BinTree<E>::height(BinTreeNode<E>*t)
            147{
            148if(!t) return 0;
            149else
            150{
            151int hl=height(t->LeftChild);
            152int hr=height(t->RightChild);
            153
            154if(hl>hr) return ++hl;
            155else return ++hr;
            156}

            157}

            158
            159
            160
            161
            162#endif
            posted on 2008-09-18 17:14 楊彬彬 閱讀(548) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)
            成人国内精品久久久久影院| 国产激情久久久久影院老熟女| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 69久久精品无码一区二区| 国产精品久久久久久久久免费| 国产高潮国产高潮久久久91 | 久久天天躁狠狠躁夜夜avapp| 国产精品久久久久久| 久久精品国产99久久久香蕉| 99精品国产综合久久久久五月天| 99久久成人国产精品免费| 久久99精品国产麻豆不卡| 亚洲va久久久噜噜噜久久| 一本色道久久88加勒比—综合| 久久亚洲国产最新网站| 99久久99这里只有免费的精品| 国产精品久久久久久久久软件| 久久er国产精品免费观看2| 国内精品久久久久影院老司| 日本久久久精品中文字幕| 亚洲国产精品无码久久| 国内精品伊人久久久影院| 久久精品国产色蜜蜜麻豆| AAA级久久久精品无码片| 亚洲AV无码久久精品成人 | 久久精品国产2020| 久久青青草原精品国产软件| 久久久久国产一级毛片高清版| 亚洲女久久久噜噜噜熟女| 天天综合久久一二三区| 久久精品这里只有精99品| 国产精品一区二区久久精品无码 | 国产精品久久久久aaaa| 国产精品99精品久久免费| 伊人久久精品无码av一区| 麻豆久久久9性大片| 日本精品久久久久久久久免费| 精品久久久久国产免费| 国产成人久久精品二区三区| 韩国三级中文字幕hd久久精品| 国产精品久久久久久久久久免费|