日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
數(shù)據(jù)結(jié)構(gòu)中二叉樹的基本操作

二叉樹的基本操作,可能包括:

濱江網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),濱江網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為濱江1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的濱江做網(wǎng)站的公司定做!

創(chuàng)建,遍歷,轉(zhuǎn)化,復(fù)制,刪除等。

遍歷:前中后三種順序的遍歷,已經(jīng)是各數(shù)據(jù)結(jié)構(gòu)與算法教程的最基礎(chǔ)內(nèi)容,在此不重復(fù)。

創(chuàng)建:大多數(shù)據(jù)結(jié)構(gòu)教程當(dāng)中的二叉樹創(chuàng)建程序,都是采用的遞歸方式,遞歸方式創(chuàng)建的二叉樹與遍歷的過程相似,所創(chuàng)建的二叉樹,也是采用左右子節(jié)點方式,后續(xù)進行遍歷操作十分方便。

轉(zhuǎn)化:直覺上,最簡單的二叉樹存儲方式其實是如下圖的數(shù)組:

*此圖出自某高校數(shù)據(jù)結(jié)構(gòu)ppt,但實在難以查證是哪個學(xué)校,無法直接感謝,請諒解。

首先,提供個滿二叉樹大小的數(shù)組,然后其中數(shù)值按完全二叉樹存儲。

顯然,此種順序存儲方法:第i號(這里編號指對應(yīng)的完全二叉樹的位序)結(jié)點的左右孩子一定保存在第2i及2i+1號單元中。

故此,為兼顧存儲的直觀與遍歷等操作的方便,從順序數(shù)組向左右子節(jié)點存儲方式的轉(zhuǎn)化也就十分重要。

1-轉(zhuǎn)化方法

分為幾個步驟:

(1)準(zhǔn)備原始數(shù)組

(2)分析數(shù)組中的有效值,對應(yīng)二叉樹節(jié)點非空;

(3)創(chuàng)建二叉樹節(jié)點;

(4)計算除最后一層子節(jié)點外,構(gòu)造節(jié)點間父子關(guān)系時的循環(huán)次數(shù);

(5)構(gòu)造二叉樹節(jié)點間的父子關(guān)系;

(6)確實二叉樹根節(jié)點;

主要代碼:

(1)準(zhǔn)備原始數(shù)組

 
 
 
 
  1. //原始數(shù)組
  2.     int intBiTreeInit[ARR_COUNT];
  3.    
  4.     //初始化原始數(shù)組至無效值
  5.     for(int i=0;i<=ARR_COUNT-1;i++)
  6.         intBiTreeInit[i]=NVALUE;
  7.     //本if條件確保ARR_COUNT是否是的乘方-1
  8.     if(0==(ARR_COUNT & (ARR_COUNT+1)))
  9.     {
  10.         for(int i=0;i<=ARR_COUNT-1;i++)
  11.             intBiTreeInit[i]=2*(i+1);
  12.     }
  13.     else
  14.         return RET_ERR;
  15.     //使最后兩數(shù)為無效值
  16.     intBiTreeInit[ARR_COUNT-1]=NVALUE;
  17.     intBiTreeInit[ARR_COUNT-2]=NVALUE;

(2)分析數(shù)組中的有效值

 
 
 
 
  1. //開始獲得數(shù)組中有效值位置
  2.    int intRel=0;
  3.    int intArr=0;
  4.    for(intArr=0;intArr<=intCount-1;intArr++)
  5.    {
  6.        if(elemArr[intArr]!=elemNValue)
  7.        {
  8.            intRel++;
  9.            vecIntEffPos.push_back(intArr);
  10.        }
  11.        }

(3)創(chuàng)建二叉樹節(jié)點

  
 
 
 
  1. //數(shù)組中有效值對應(yīng)創(chuàng)建節(jié)點
  2. //同時初始化父子節(jié)點為NULL
  3. for(intArr=0;intArr<=intRel-1;intArr++)
  4. {
  5.     pBiTreeTemp=(PBiTreeNode)malloc(sizeof(BiTreeNode));;
  6.     
  7.     if(NULL==pBiTreeTemp)                                //判斷是否有足夠的內(nèi)存空間
  8.     {
  9.         cout<<"Memory alloc failure"<
  10.         return RET_ERR;
  11.     }
  12.     //將有效值賦予節(jié)點
  13.     pBiTreeTemp->BiTreeData=elemArr[vecIntEffPos[intArr]];
  14.     
  15.     //初始化左右子節(jié)點為null,便于后續(xù)的遍歷
  16.     pBiTreeTemp->leftChild=NULL;
  17.     pBiTreeTemp->rightChild=NULL;
  18.     //先存節(jié)點值
  19.     vecPBiTree.push_back(pBiTreeTemp);

(4)計算除最后一層子節(jié)點外,構(gòu)造節(jié)點間父子關(guān)系時的循環(huán)次數(shù)

    //生成父子關(guān)系時最后一層不必遍歷,故理論循環(huán)上限可優(yōu)化

 
 
 
 
  1. int intSubLast=0;
  2.    intSubLast=intCount-(intCount+1)/2;

(5)構(gòu)造二叉樹節(jié)點間的父子關(guān)系

 
 
 
 
  1. for(intArr=0;intArr<=intSubLast-1;intArr++)
  2. {
  3.     //左右節(jié)點若存儲有效值則同時創(chuàng)建父子關(guān)系
  4.     if(elemArr[intArr*2+1]!=elemNValue)
  5.         vecPBiTree[intArr]->leftChild=vecPBiTree[intArr*2+1];
  6.         
  7.     if(elemArr[intArr*2+2]!=elemNValue)
  8.         vecPBiTree[intArr]->rightChild=vecPBiTree[intArr*2+2];

(6)確實二叉樹根節(jié)點

  
 
 
 
  1. pBiTree=vecPBiTree[0];

轉(zhuǎn)化為左右子節(jié)點方式存儲后,則各種遍歷操作按大多數(shù)教程的常規(guī)方式處理即可,如前序遍歷函數(shù):

 
 
 
 
  1. int BiTreePreTrace(PBiTreeNode &pBiTree)
  2. {
  3.     //條件為非空樹
  4.     if(pBiTree)
  5.     {
  6.         cout<<"Node value="<<(pBiTree->BiTreeData)<
  7.         
  8.         BiTreePreTrace(pBiTree->leftChild);    //遍歷左子樹
  9.         BiTreePreTrace(pBiTree->rightChild);    //遍歷右子樹
  10.     }
  11.     return RET_OK;
  12. }

完整程序,請見附件文件。

 http://files.cnblogs.com/vbspine/cnsDSExec.rar

*上述程序在Windows7x64,VS2008環(huán)境編譯運行通過


分享文章:數(shù)據(jù)結(jié)構(gòu)中二叉樹的基本操作
文章轉(zhuǎn)載:http://m.5511xx.com/article/cdhddih.html