• <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
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(5)

            隨筆檔案

            文章分類

            文章檔案

            相冊

            C++語言

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            二叉樹實現(主要是為了實現二叉搜索樹時作為其父類)
              1//實現二叉樹數據結構
              2#ifndef BINTREE_H
              3#define BINTREE_H
              4
              5
              6//定義節點結構
              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數據結構
             28template<class E>//K關鍵子類型,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);//根據關鍵字進行刪除
             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;//根節點指針
             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 楊彬彬 閱讀(553) 評論(0)  編輯 收藏 引用 所屬分類: 數據結構
            天天综合久久久网| 国产亚洲欧美成人久久片| 99久久精品无码一区二区毛片 | 久久人人爽人人爽人人片av高请| 综合久久国产九一剧情麻豆| 国产A级毛片久久久精品毛片| 久久久久亚洲AV片无码下载蜜桃| 国产精品一久久香蕉国产线看| 激情综合色综合久久综合| 伊人色综合久久天天人守人婷| 久久精品国产亚洲AV大全| 久久国产精品免费| 久久久久久午夜成人影院| 理论片午午伦夜理片久久| 久久国产高潮流白浆免费观看| 久久精品国产精品亜洲毛片| 日本强好片久久久久久AAA | 久久精品无码午夜福利理论片| 88久久精品无码一区二区毛片 | 久久e热在这里只有国产中文精品99| 思思久久好好热精品国产| 久久99精品国产一区二区三区| 久久国产劲爆AV内射—百度| 精品久久久久久无码人妻蜜桃| 久久精品毛片免费观看| 久久久久国产精品人妻| 久久久久99精品成人片| 66精品综合久久久久久久| 狠狠88综合久久久久综合网| 久久精品国产色蜜蜜麻豆| 青青草原综合久久大伊人导航| 青青草原1769久久免费播放| 久久久久亚洲av无码专区喷水| 亚洲日韩中文无码久久| 国产69精品久久久久观看软件 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 91精品婷婷国产综合久久| 国产精品久久亚洲不卡动漫| 久久九九精品99国产精品| 日韩精品久久久久久久电影蜜臀| 一本久久a久久精品vr综合|