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

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>
            亚洲午夜在线观看| 亚洲一区二区在线播放| 欧美一区二区三区四区视频| 一本色道久久88综合日韩精品| 欧美日韩一区二区三区视频| 亚洲午夜精品视频| 午夜在线观看免费一区| 亚洲第一毛片| 日韩亚洲欧美高清| 国产专区欧美专区| 亚洲国产一区在线| 国产精品av久久久久久麻豆网| 欧美一区网站| 欧美福利视频| 久久精品人人| 欧美精品日韩| 久久久久久久久一区二区| 欧美成人黑人xx视频免费观看| 在线亚洲自拍| 久久久噜噜噜久久中文字免| 一区二区三区四区五区精品| 欧美主播一区二区三区| aa国产精品| 久久久久久亚洲综合影院红桃 | 国产婷婷色一区二区三区四区| 久久综合久色欧美综合狠狠| 欧美日韩国产专区| 美女精品自拍一二三四| 国产精品―色哟哟| 亚洲国产一区二区三区高清| 国产丝袜美腿一区二区三区| 亚洲美女中文字幕| 在线视频成人| 欧美一区二区三区四区在线| 亚洲天堂网在线观看| 久久只精品国产| 欧美自拍偷拍午夜视频| 欧美色视频在线| 亚洲精品乱码久久久久久久久| 精品成人一区| 欧美亚洲综合在线| 午夜精品在线看| 欧美午夜免费影院| 亚洲精品老司机| 亚洲精品影院在线观看| 另类天堂视频在线观看| 久久免费少妇高潮久久精品99| 国产精品视频99| 久久亚洲风情| 99精品国产福利在线观看免费 | 欧美在线观看你懂的| 欧美日韩一区二区三区免费| 亚洲国产精品久久久久秋霞蜜臀| 韩国v欧美v日本v亚洲v| 午夜精品在线视频| 欧美在线视频二区| 国产一区二区久久久| 午夜精品免费在线| 久久精品30| 激情五月***国产精品| 久久久精彩视频| 嫩草国产精品入口| 最新中文字幕一区二区三区| 欧美mv日韩mv国产网站app| 欧美肥婆bbw| 亚洲精品一二三区| 欧美日本中文字幕| 亚洲午夜电影网| 欧美在线免费观看视频| 国产视频在线观看一区二区| 欧美影院视频| 欧美成人高清视频| 一本色道久久综合亚洲精品小说| 欧美日韩精品久久久| 亚洲天堂免费观看| 久久天天躁夜夜躁狠狠躁2022| 尤物yw午夜国产精品视频明星| 久久夜色撩人精品| 亚洲精品在线观| 欧美一区二区私人影院日本| 国产综合欧美| 欧美激情欧美狂野欧美精品 | 欧美福利视频在线观看| 日韩一二三在线视频播| 欧美性猛交xxxx乱大交退制版| 亚洲一级在线观看| 免费不卡视频| 亚洲永久字幕| 伊人久久婷婷| 欧美午夜性色大片在线观看| 欧美在线二区| 日韩视频免费观看高清在线视频| 欧美一区二区高清| 亚洲黑丝在线| 国产精品丝袜久久久久久app| 久久九九全国免费精品观看| 亚洲裸体在线观看| 久久―日本道色综合久久| 一区二区福利| 在线免费高清一区二区三区| 欧美性生交xxxxx久久久| 久久久精品一区二区三区| 日韩视频免费观看| 欧美黄色影院| 久久精品男女| 亚洲免费一级电影| 亚洲肉体裸体xxxx137| 国产亚洲午夜| 欧美性猛交一区二区三区精品| 久久视频一区| 性欧美在线看片a免费观看| 亚洲人成免费| 欧美成人免费va影院高清| 欧美一级艳片视频免费观看| av成人动漫| 亚洲国产精品电影| 黄色成人片子| 国产日韩在线一区| 性视频1819p久久| 欧美三级在线视频| 麻豆精品视频在线观看视频| 亚洲欧美日韩一区二区在线| 亚洲日本黄色| 欧美激情aⅴ一区二区三区| 久久久久久香蕉网| 欧美一区二区三区精品电影| 亚洲一区二区欧美| 亚洲最新在线视频| 日韩亚洲国产精品| 亚洲精品偷拍| 亚洲免费福利视频| 99一区二区| 日韩一级不卡| 中文精品视频一区二区在线观看| 亚洲精选视频在线| 一区二区电影免费在线观看| 一本久久青青| 亚洲素人一区二区| 亚洲一区观看| 在线亚洲电影| 亚洲一区制服诱惑| 性欧美精品高清| 久久精品99久久香蕉国产色戒| 欧美一级夜夜爽| 久久亚洲精品网站| 欧美jizzhd精品欧美喷水| 亚洲成人资源网| 亚洲日本电影在线| 亚洲视频1区2区| 亚洲欧美中文另类| 久久久7777| 欧美精品在线免费播放| 欧美午夜国产| 国产深夜精品| 亚洲国产天堂网精品网站| 亚洲人午夜精品免费| 一本不卡影院| 久久成人精品电影| 欧美成黄导航| 一本久道久久综合中文字幕| 亚洲欧美在线免费观看| 久久久亚洲精品一区二区三区 | 欧美风情在线观看| 国产精品久久久久久久久久久久久久| 国产精品丝袜白浆摸在线| 国内成人自拍视频| 亚洲精品午夜精品| 久久精品91久久久久久再现| 亚洲大片精品永久免费| 亚洲一区二区三区高清不卡| 久久精品91| 欧美三级视频在线播放| 激情久久影院| 亚洲图片在线| 女生裸体视频一区二区三区| 一区二区三区高清| 久久久精品999| 欧美视频在线观看视频极品| 激情久久五月天| 亚洲欧美一区二区原创| 欧美刺激午夜性久久久久久久| 一区二区三区四区五区精品| 久久一区二区三区av| 国产精品稀缺呦系列在线| 亚洲国产日韩一区二区| 欧美在线欧美在线| 亚洲精品在线免费观看视频| 久久久www成人免费无遮挡大片| 另类专区欧美制服同性| 亚洲免费观看| 久久婷婷一区| 亚洲最新在线视频| 欧美成人亚洲成人| 国际精品欧美精品| 亚洲欧美日本国产有色| 亚洲精品一二三区| 欧美电影免费观看大全| 伊人久久大香线蕉av超碰演员| 麻豆国产精品777777在线| 亚洲国产日本|