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

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视频一区二区三区| 欧美精品一区二区三区高清aⅴ| 亚洲欧美日韩另类精品一区二区三区| 亚洲第一黄色| 在线观看免费视频综合| 在线电影院国产精品| 尤物网精品视频| 亚洲黑丝在线| 亚洲毛片在线观看.| 99精品国产在热久久| 一区二区日韩精品| 性色av香蕉一区二区| 久久精品综合| 亚洲高清在线观看| 欧美激情网站在线观看| 亚洲三级影片| 久久av一区二区| 欧美激情一区二区三区在线| 亚洲欧美国产三级| 久久久久久有精品国产| 欧美精品日韩一本| 国产欧美一区二区精品婷婷| 亚洲黄色成人| 欧美一级电影久久| 欧美不卡激情三级在线观看| 亚洲精品视频免费| 久久精品91久久久久久再现| 欧美日韩国产限制| 国产曰批免费观看久久久| 亚洲国产欧美一区| 亚洲一区中文| 久久在线视频| 一区二区三区视频免费在线观看| 久久国产欧美| 国产精品成人一区二区艾草| 国产日韩欧美在线播放不卡| 欧美1区3d| 小黄鸭精品密入口导航| 噜噜噜久久亚洲精品国产品小说| 欧美色精品在线视频| 精品51国产黑色丝袜高跟鞋| 一区二区三区欧美在线观看| 久久琪琪电影院| 亚洲精品孕妇| 久久久久一本一区二区青青蜜月| 国产精品爱久久久久久久| 永久久久久久| 欧美伊人久久| 一区二区日韩| 欧美日本久久| 亚洲电影有码| 久久夜色精品亚洲噜噜国产mv| 99视频有精品| 欧美韩日亚洲| 91久久黄色| 老色鬼精品视频在线观看播放| 亚洲午夜女主播在线直播| 欧美美女操人视频| 亚洲精品小视频| 亚洲大胆人体视频| 欧美xx视频| 亚洲精品字幕| 最新成人在线| 欧美精品在欧美一区二区少妇| 在线日本成人| 欧美freesex8一10精品| 久久精品欧洲| 在线成人h网| 亚洲大片精品永久免费| 欧美成人69av| 99在线精品视频| 99在线热播精品免费| 欧美日韩国产综合网| aⅴ色国产欧美| 9久草视频在线视频精品| 欧美午夜精品久久久久久久| 亚洲欧美另类在线| 亚洲桃花岛网站| 国产日韩精品视频一区二区三区| 欧美影院精品一区| 久久久之久亚州精品露出| 亚洲国产精品t66y| 亚洲精品美女久久7777777| 欧美日韩卡一卡二| 亚洲女人小视频在线观看| 亚洲欧美国产视频| 樱桃成人精品视频在线播放| 欧美成va人片在线观看| 欧美精品日韩www.p站| 亚洲欧美综合另类中字| 久久久噜噜噜久久中文字免| 日韩一级欧洲| 亚洲欧美激情一区| 亚洲国产精品免费| 日韩视频免费观看高清完整版| 午夜久久福利| 黄色小说综合网站| 亚洲国内高清视频| 国产精品亚洲不卡a| 美腿丝袜亚洲色图| 欧美日韩视频一区二区| 久久久久综合网| 欧美人与性动交a欧美精品| 亚洲欧美日韩精品一区二区 | 亚洲电影网站| 欧美色图首页| 牛牛影视久久网| 国产精品久久久久毛片大屁完整版| 久久er精品视频| 欧美1区2区| 久久久xxx| 欧美亚一区二区| 欧美激情亚洲精品| 国产欧美一区二区精品性| 亚洲激情在线视频| 黄色一区二区在线观看| 在线亚洲欧美视频| 亚洲人体影院| 久久精品视频在线观看| 午夜日韩在线| 欧美日韩一区二区三区高清| 久热这里只精品99re8久| 欧美剧在线观看| 欧美激情视频在线播放 | 日韩一区二区久久| 卡一卡二国产精品| 欧美一区二区三区在线视频| 欧美日韩天堂| 亚洲成人在线视频播放| 国产精品日韩久久久| 亚洲精品激情| 日韩视频中文字幕| 老牛国产精品一区的观看方式| 欧美一激情一区二区三区| 欧美午夜不卡| 亚洲尤物在线| 小黄鸭精品aⅴ导航网站入口| 欧美日韩国产成人| 亚洲乱码国产乱码精品精可以看| 亚洲每日更新| 欧美日韩精品系列| 亚洲肉体裸体xxxx137| 亚洲精品黄网在线观看| 美日韩精品视频免费看| 欧美国产在线观看| 亚洲国产影院| 欧美精品国产精品| 亚洲破处大片| 亚洲一区高清| 国产欧美一区二区精品性色| 性久久久久久久| 久久午夜色播影院免费高清| 激情成人中文字幕| 老巨人导航500精品| 亚洲缚视频在线观看| 一区二区三区蜜桃网| 国产精品久久国产精麻豆99网站| 中国成人黄色视屏| 久久精品夜色噜噜亚洲aⅴ| 欧美日韩在线观看一区二区三区| 欧美亚洲专区| 国产日韩欧美成人| 久久国产夜色精品鲁鲁99| 欧美chengren| 亚洲综合国产精品| 影音先锋亚洲视频| 欧美日韩国产精品一区| 亚洲无限av看| 女人天堂亚洲aⅴ在线观看| 亚洲黄色性网站| 国产精品久久久久国产精品日日| 午夜精品偷拍| 免费日韩成人| 亚洲欧美另类国产| 国模大胆一区二区三区| 欧美高清一区二区| 亚洲欧美日韩国产一区二区三区 | 欧美大秀在线观看| 一区二区高清视频| 国产在线精品成人一区二区三区| 久久综合精品一区| 亚洲一区精品在线| 亚洲国产婷婷| 久久看片网站| 亚洲欧美美女| 日韩午夜电影在线观看| 激情视频一区二区| 国产伦一区二区三区色一情| 欧美大片免费看| 欧美一区二区三区成人| 日韩午夜免费| 亚洲国产美女| 免费成人在线观看视频| 香蕉久久夜色精品国产| 亚洲午夜影视影院在线观看| 亚洲精品国产精品国自产观看| 国产亚洲精品久久飘花| 国产精品成人一区二区| 欧美日韩成人一区二区| 欧美大色视频|