• <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)
            久久精品aⅴ无码中文字字幕不卡| 久久夜色tv网站| 久久99精品久久久久久野外| 国产亚洲欧美精品久久久| 久久国语露脸国产精品电影| 性高湖久久久久久久久AAAAA| 国产91久久综合| 久久精品国产亚洲一区二区| 久久久久无码精品国产不卡| 狠狠色婷婷久久一区二区| 伊人久久亚洲综合影院| 日日狠狠久久偷偷色综合96蜜桃| 久久精品国产一区二区三区| 精品久久久久久国产牛牛app| 草草久久久无码国产专区| 91精品国产91久久久久久青草| 国产精品久久久久久久久久免费| 国产精品无码久久四虎| 久久国产精品偷99| 久久精品亚洲福利| 亚洲国产成人精品女人久久久 | 人妻无码久久一区二区三区免费| 91麻豆国产精品91久久久| 久久精品国产日本波多野结衣| 99久久精品免费看国产一区二区三区| 久久综合久久自在自线精品自| 久久久久久亚洲Av无码精品专口| 99999久久久久久亚洲| 狠狠人妻久久久久久综合| 色婷婷狠狠久久综合五月| 精品综合久久久久久97| 国产精品久久永久免费| 久久国产成人| 人妻精品久久久久中文字幕一冢本 | 亚洲欧美成人综合久久久 | 色综合久久中文综合网| 久久久久亚洲av毛片大| 久久精品aⅴ无码中文字字幕不卡| 99久久精品国产综合一区| 久久精品中文字幕一区| 91久久精品视频|