• <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久久精品九九亚洲精品| 欧美久久天天综合香蕉伊| 久久久黄片| 综合久久国产九一剧情麻豆| 国产亚洲欧美成人久久片| 人妻无码久久精品| 2021久久国自产拍精品| 伊人色综合久久天天人守人婷| 日本强好片久久久久久AAA| 国产精品狼人久久久久影院| 久久久久国产精品人妻| 伊人久久大香线蕉精品| 一本色综合网久久| 久久夜色精品国产亚洲av| 久久国产欧美日韩精品| 一本久久a久久精品综合香蕉| 69国产成人综合久久精品| 色天使久久综合网天天| 99久久国产综合精品五月天喷水| 亚洲精品乱码久久久久66| 性欧美大战久久久久久久| 久久精品国产一区二区三区日韩| 亚洲日本va中文字幕久久| 亚洲精品久久久www| 91麻豆精品国产91久久久久久| 无码国内精品久久综合88| 久久亚洲电影| 久久九九免费高清视频| 久久综合综合久久97色| 99久久精品国产免看国产一区| 亚洲精品国产美女久久久| 久久久国产视频| 色婷婷久久久SWAG精品| 怡红院日本一道日本久久 | 久久综合鬼色88久久精品综合自在自线噜噜 | 国产成人精品久久一区二区三区av | 久久夜色精品国产欧美乱| 久久综合九色综合网站| 一级女性全黄久久生活片免费 | 国内精品久久久久久久久电影网 |