青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

l

成都手游碼農一枚
隨筆 - 32, 文章 - 0, 評論 - 117, 引用 - 0
數據加載中……

[C++]二叉樹的鏈式描述。創建,遍歷,摧毀。

前段時間寫的,不好的地方請支持,謝謝。

/*********************************************************
FileName:BinaryTree.cpp
Author    :shly
Date    :2009.9.1
E-mail    :xlq1989@vip.qq.com
*二叉樹的鏈式描述。創建,遍歷,摧毀。
********************************************************
*/

#include 
<iostream>
#include 
<deque>
#include 
<cassert>
#include 
<cstring>
using namespace std;

template
<typename _Ty>
struct BinNode
{
    BinNode():pLeft(NULL),pRight(NULL)
    
{
    
//    cout<<nNode<<endl;++nNode;
    }

    BinNode
<_Ty> *pLeft, *pRight;
    _Ty    tData;

    
//test---
    
//~BinNode(){--nNode;cout<<nNode<<endl;}
    
//    static int nNode;
}
;
//template<typename _Ty>
//int BinNode<_Ty>::nNode=0;

template
<typename _Ty>
class BinaryTree
{
    BinNode
<_Ty>* pRoot;
public:
    BinaryTree():pRoot(NULL)
{}
    
~BinaryTree(){}
public:
//    void CreateBinTree(_Ty& tData);
    void CreateBinTree(_Ty* tpStart,int nSize);
    
void DestroyBinTree();
//    void AddBinTree(BinaryTree* pLeft,BinaryTree* pRight);
    void PreOrder();
    
void InOrder();
    
void PostOrder();
    
void LevelOrder();
    
void Vista(const _Ty& tData);
private
    
void _destroy(BinNode<_Ty>* pNode);
    
void _pre(BinNode<_Ty>* pNode);
    
void _in(BinNode<_Ty>* pNode);
    
void _post(BinNode<_Ty>* pNode);
}
;

/*********************************************************
*Function    :CreateBinTree
*parameter    :_Ty tData
*return        :void
*為pRoot創建一個結點。
********************************************************
*/

//template<typename _Ty>void BinaryTree<_Ty>::CreateBinTree(_Ty& tData){
//    assert(NULL==pRoot);
//    pRoot=new BinNode<_Ty>;
//    assert(NULL!=pRoot);
//
//    pRoot->tData=tData;
//    pRoot->pLeft=pRoot->pRight=NULL;
//}
/*********************************************************
*Function    :CreateBinTree
*parameter    :_Ty* tpStart,int nSize
*return        :void
*根據一組數據順序生成一顆二叉樹。
********************************************************
*/

template
<typename _Ty>
void BinaryTree<_Ty>::CreateBinTree(_Ty* tpStart,int nSize)
{
    assert(tpStart
&&!pRoot&&nSize>0);

    deque
<BinNode<_Ty>**> dq;
    dq.push_back(
&pRoot);
    
    
for(int i=0;i<nSize;)
    
{
        BinNode
<_Ty>** pb=dq.front();
        dq.pop_front();
        assert(NULL
==(*pb));
        (
*pb)=new BinNode<_Ty>;
        (
*pb)->tData=tpStart[i++];
        dq.push_back(
&(*pb)->pLeft);
        dq.push_back(
&(*pb)->pRight);
    }

}

/*********************************************************
*Function    :AddBinTree
*parameter    :BinaryTree* pLeft,* pRight
*return        :void
*將兩個子樹組合成一個。
********************************************************
*/

//template<typename _Ty>void BinaryTree<_Ty>::AddBinTree(BinaryTree* pLeft,BinaryTree* pRight){
//    assert(NULL!=pLeft);
//    assert(NULL!=pRight);
//    assert(NULL!=pRoot);
//    assert(NULL==pRoot->pLeft);
//    assert(NULL==pRoot->pRight);
//
//    pRoot->pLeft=pLeft;
//    pRoot->pRight=pRight;
//
//    pLeft=pRight=0;
//}
/*********************************************************
*Function    :DestroyBintree
*parameter    :void
*return        :void
*摧毀二叉樹。
********************************************************
*/

template
<typename _Ty>void BinaryTree<_Ty>::_destroy(BinNode<_Ty>* pNode){
/*    if(NULL==pNode)return;
    if(NULL==pNode->pLeft
     &&NULL==pNode->pRight){
        delete pNode;
        static int i=0;
        ++i;
        cout<<i<<"__";
        pNode=NULL;
    //    cout<<"Destroy BinaryTree!"<<endl;
    }
    else{
        _destroy(pNode->pLeft);
        _destroy(pNode->pRight);
    }
*/

    
if(!pNode)return;
    _destroy(pNode
->pLeft);
    _destroy(pNode
->pRight);
    delete pNode;
    pNode
=NULL;
}

template
<typename _Ty>
inline 
void BinaryTree<_Ty>::DestroyBinTree()
{
    _destroy(pRoot);
}


/*********************************************************
*Function    :PreOrder
*parameter    :void
*return        :void
*先序遍歷。
********************************************************
*/

template
<typename _Ty>
void BinaryTree<_Ty>::_pre(BinNode<_Ty>* pNode)
{
    
if(!pNode)return;
    Vista(pNode
->tData);
    _pre(pNode
->pLeft);
    _pre(pNode
->pRight);
}

template
<typename _Ty>
inline 
void BinaryTree<_Ty>::PreOrder()
{
    _pre(pRoot);
}

/*********************************************************
*Function    :InOrder
*parameter    :void
*return        :void
*中序遍歷。
********************************************************
*/

template
<typename _Ty>
void BinaryTree<_Ty>::_in(BinNode<_Ty>* pNode)
{
    
if(!pNode)return;
    _in(pNode
->pLeft);
    Vista(pNode
->tData);
    _in(pNode
->pRight);
}

template
<typename _Ty>
inline 
void BinaryTree<_Ty>::InOrder()
{
    _in(pRoot);
}

/*********************************************************
*Function    :PostOrder
*parameter    :void
*return        :void
*后序遍歷。
********************************************************
*/

template
<typename _Ty>
void BinaryTree<_Ty>::_post(BinNode<_Ty>* pNode)
{
    
if(!pNode)return;
    _post(pNode
->pLeft);
    _post(pNode
->pRight);
    Vista(pNode
->tData);
}

template
<typename _Ty>
inline 
void BinaryTree<_Ty>::PostOrder()
{
    _post(pRoot);
}

/*********************************************************
*Function    :LevelOrder
*parameter    :void
*return        :void
*逐層遍歷。
********************************************************
*/

template
<typename _Ty>
void BinaryTree<_Ty>::LevelOrder()
{
    
if(!pRoot)return;
    deque
<BinNode<_Ty>*> dq;
    dq.push_back(pRoot);
    
while(!dq.empty())
    
{
        BinNode
<_Ty>* temp=dq.front();
        dq.pop_front();
        Vista(temp
->tData);
        
if(NULL!=temp->pLeft)
            dq.push_back(temp
->pLeft);
        
if(NULL!=temp->pRight)
            dq.push_back(temp
->pRight);
    }

}

/*********************************************************
*Function    :Vista
*parameter    :const _Ty& tData
*return        :void
*訪問操作。
********************************************************
*/

template
<typename _Ty>
void BinaryTree<_Ty>::Vista(const _Ty& tData)
{
    
if(' '!=tData)
        cout
<<tData<<" ";
}


int main()
{
    
//char* arr="+*/abcd";
    
//char* arr="++d+c  ab";
    char* arr="/+*-++* axy bca";
    BinaryTree
<char> bt;
    bt.CreateBinTree(arr,strlen(arr));
//創建二叉樹
    bt.PreOrder();//先序遍歷
    cout<<endl;
    bt.InOrder();
//中序遍歷
    cout<<endl;
    bt.PostOrder();
//后序遍歷
    cout<<endl;
    bt.LevelOrder();
//逐層遍歷
    cout<<endl;
    bt.DestroyBinTree();
//摧毀二叉樹
    return 0;
}

posted on 2009-09-01 00:58 l1989 閱讀(970) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構

評論

# re: [C++]二叉樹的鏈式描述。創建,遍歷,摧毀。  回復  更多評論   

弱弱的說...刪除那段似乎刪了樹葉...留了個樹干 - -
2009-09-01 10:10 | Ocean.Tu

# re: [C++]二叉樹的鏈式描述。創建,遍歷,摧毀。  回復  更多評論   

謝謝LS提醒,已經改了。
這些東西真麻煩哦。。
2009-09-01 12:37 | shly
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久综合狠狠| 久久久无码精品亚洲日韩按摩| 欧美日韩精品一区二区| 亚洲欧洲另类国产综合| 久久久久久久久久久久久女国产乱| 黄色成人在线| 久久婷婷麻豆| 欧美日韩专区在线| 亚洲国产一区二区精品专区| 国产精品少妇自拍| 亚洲精品在线电影| 亚洲一区免费看| 99精品视频免费观看视频| 久久久97精品| 国产亚洲精品久久久久动| 午夜精品久久久久| 久久久在线视频| 国外精品视频| 亚洲电影免费观看高清完整版在线观看 | 欧美人体xx| 亚洲一区二区在线播放| 麻豆九一精品爱看视频在线观看免费| 国内在线观看一区二区三区| 久久麻豆一区二区| 久久综合九色综合欧美狠狠| 亚洲毛片在线看| 久久免费观看视频| 亚洲你懂的在线视频| 久久精品99国产精品日本| 久久久久免费视频| 久久激情视频久久| 在线观看亚洲一区| 国产精品99久久久久久白浆小说| 正在播放亚洲| 在线视频观看日韩| 国产精品久久久久久亚洲毛片| 欧美日韩国产小视频| 欧美精品一区二区三区在线看午夜| 一本色道久久综合狠狠躁篇怎么玩 | 噜噜噜在线观看免费视频日韩| 亚洲日本黄色| 欧美高清视频在线观看| 欧美一级大片在线观看| 欧美精品日韩一本| 在线看片欧美| 欧美精品1区2区3区| 久久精品亚洲精品国产欧美kt∨| 亚洲激情一区| 亚洲欧美在线另类| 一本到高清视频免费精品| 亚洲精选成人| 亚洲人成在线观看网站高清| 欧美一区二区在线| 亚洲特黄一级片| 国产婷婷成人久久av免费高清 | 亚洲电影专区| 老司机精品福利视频| 亚洲精品视频免费观看| 一区二区三区蜜桃网| 美女亚洲精品| 亚洲欧美国产77777| 1000部国产精品成人观看| 欧美老女人xx| 蜜臀99久久精品久久久久久软件 | 在线看无码的免费网站| 日韩视频在线观看国产| 欧美福利视频网站| 一区二区三区精品| 国产伦精品一区二区三区免费| 欧美淫片网站| 麻豆成人综合网| 亚洲色图自拍| 最新亚洲视频| 国产精品久久久久久久app| 久久久999精品视频| 亚洲人被黑人高潮完整版| 亚洲第一黄色| 亚洲国产天堂久久综合| 久久成人亚洲| 宅男噜噜噜66国产日韩在线观看| 亚洲影视在线| 美日韩免费视频| 国产精品久久777777毛茸茸| 久久久亚洲国产天美传媒修理工| 亚洲一级一区| 亚洲电影av| 免费观看亚洲视频大全| 正在播放欧美视频| 99在线精品视频| 91久久在线播放| 亚洲国产91色在线| 亚洲国产视频a| 国产日产欧产精品推荐色| 欧美理论电影网| 亚洲国产精品美女| 一本大道久久a久久精二百| 欧美一区二区三区在线| 久久久免费观看视频| 国产一区二区电影在线观看| 久久久99久久精品女同性| 在线视频精品一区| 国产精品青草综合久久久久99| 看欧美日韩国产| 国产一区二区三区四区五区美女| 欧美日韩精品一区二区在线播放| 欧美日韩免费高清| 国产精品久久国产精品99gif| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 亚洲激情视频| 亚洲一本视频| 亚洲一区二区三区高清 | 在线午夜精品自拍| 美女在线一区二区| 国产人成精品一区二区三| 欧美在线免费| 欧美激情一区在线观看| 国产一区欧美日韩| 亚洲视频欧美在线| 欧美大片va欧美在线播放| 亚洲成人资源网| 亚洲无亚洲人成网站77777| 久久久噜噜噜久噜久久| 国产乱码精品一区二区三区五月婷| 国产拍揄自揄精品视频麻豆| 亚洲精品视频免费观看| 99re66热这里只有精品3直播 | 国产精品亚洲一区| 久久久久在线| 欧美高清在线视频| 久久综合网hezyo| 亚洲国产清纯| 伊人狠狠色j香婷婷综合| 亚洲欧美中文在线视频| 亚洲国产欧美日韩精品| 免费国产一区二区| 亚洲激情欧美激情| 欧美韩日高清| 麻豆精品一区二区综合av | 在线一区日本视频| 欧美国产日本在线| 一本一本a久久| 在线视频一区观看| 性色av一区二区三区| 亚洲国产精品一区二区三区| 美女视频黄免费的久久| 国产精品系列在线播放| 亚洲人体影院| 99精品视频免费观看| 老司机免费视频一区二区三区 | 欧美手机在线| 伊伊综合在线| 亚洲欧洲视频| 国产精品久久夜| 久久久久国产一区二区| 欧美国产在线电影| 亚洲男人的天堂在线| 欧美在线视屏| 一区二区三区久久| 久久成人18免费观看| 国产无遮挡一区二区三区毛片日本| 国产综合在线视频| 久久国产精品毛片| 欧美成人免费va影院高清| 99视频在线观看一区三区| 欧美日韩在线播放| 久久精品国产亚洲aⅴ| 一本久久综合亚洲鲁鲁| 欧美视频网站| 欧美一区二区日韩一区二区| 久久影院午夜论| 欧美精品一区二区精品网| 久久综合色8888| 狠狠综合久久av一区二区老牛| aa级大片欧美三级| 99re8这里有精品热视频免费 | 国产一区二区三区在线播放免费观看 | 欧美精品成人一区二区在线观看| 夜夜躁日日躁狠狠久久88av| 欧美伊人久久| 亚洲一区中文字幕在线观看| 欧美久久久久| 亚洲欧美日韩国产中文在线| 欧美国产日韩二区| 久久狠狠久久综合桃花| 欧美成年人网站| 91久久精品国产| 欧美成人r级一区二区三区| 欧美**字幕| 99精品欧美一区二区三区| 欧美精品一区二区三区久久久竹菊| 一区二区三区.www| 亚洲一区二区三区高清| 国产午夜精品一区理论片飘花 | 欧美中文字幕视频| 亚洲黄页一区| 亚洲高清在线视频| 欧美激情精品久久久久久大尺度| 亚洲欧美日韩另类| 日韩一级二级三级| 亚洲成人原创|