• <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)  編輯 收藏 引用 所屬分類: 數據結構
            88久久精品无码一区二区毛片 | 精品综合久久久久久888蜜芽| 亚洲色欲久久久综合网东京热| 精品久久久久久国产| 狠狠色婷婷综合天天久久丁香| 久久精品国产亚洲沈樵| 国产精品乱码久久久久久软件| 久久久国产乱子伦精品作者| 久久国产免费直播| 久久精品国产亚洲AV无码娇色| 久久e热在这里只有国产中文精品99 | 国产精品久久波多野结衣| 久久久久亚洲精品天堂久久久久久| 亚洲va久久久噜噜噜久久| 久久99精品免费一区二区| 国产成人精品综合久久久| 久久精品国产精品青草app| 久久99精品国产麻豆蜜芽| 久久91精品久久91综合| 久久香综合精品久久伊人| 久久成人精品视频| 亚洲va中文字幕无码久久| 久久婷婷五月综合97色直播| 久久精品国产影库免费看| 日产精品久久久久久久| 久久天天躁狠狠躁夜夜不卡 | 久久91精品久久91综合| 久久无码高潮喷水| 伊人精品久久久久7777| 精品久久久久一区二区三区 | 精品久久久久久久无码| 一本一本久久a久久综合精品蜜桃| 三级韩国一区久久二区综合| 久久精品国产亚洲7777| 日本精品久久久久中文字幕| 亚洲午夜久久久影院| 久久婷婷五月综合成人D啪| 久久国产精品久久精品国产| 国产精品gz久久久| 久久中文字幕一区二区| 国产A级毛片久久久精品毛片|