C語(yǔ)言中計(jì)算二叉樹(shù)的寬度的兩種方式
C語(yǔ)言中計(jì)算二叉樹(shù)的寬度的兩種方式
二叉樹(shù)作為一種很特殊的數(shù)據(jù)結(jié)構(gòu),功能上有很大的作用!今天就來(lái)看看怎么計(jì)算一個(gè)二叉樹(shù)的最大的寬度吧。
采用遞歸方式
下面是代碼內(nèi)容:
int GetMaxWidth(BinaryTree pointer){
int width[10];//加入這棵樹(shù)的最大高度不超過(guò)10
int maxWidth=0;
int floor=1;
if(pointer){
if(floor==1){//如果訪問(wèn)的是根節(jié)點(diǎn)的話,第一層節(jié)點(diǎn)++;
width[floor]++;
floor++;
if(pointer->leftChild)
width[floor]++;
if(pointer->rightChild)
width[floor]++;
}else{
floor++;
if(pointer->leftChild)
width[floor]++;
if(pointer->rightChild)
width[floor]++;
}
if(maxWidth<width[floor])
maxWidth=width[floor];
GetMaxWidth(pointer->leftChild);
floor--;//記得退回一層,否則會(huì)出錯(cuò)。因?yàn)橐呀?jīng)Get過(guò)了,所以要及時(shí)的返回。
GetMaxWidth(pointer->rightChild);
}
return maxWidth;
}
采用非遞歸方式
采用非遞歸方式計(jì)算二叉樹(shù)的寬度需要借助于隊(duì)列。代碼如下:
int GetMaxWidth(BinaryTree pointer){
if(pointer==null){
return 0;
}
Queue<BinaryTreeNode> queue=new ArrayDeque<BinaryTreeNode>();
int maxWidth=1;//最大寬度
queue.add(pointer);
while(true){
int size=queue.size();//計(jì)算當(dāng)前層的節(jié)點(diǎn)的個(gè)數(shù)
if(size==0){
break;
}
while(size>0){//如果當(dāng)前層還有節(jié)點(diǎn)就進(jìn)行下去
BinaryTreeNode node=queue.poll();
size--;
if(node->leftChild)
queue.add(node->leftChild);//當(dāng)前節(jié)點(diǎn)的左子樹(shù)入隊(duì)
if(node->rightChild)
queue.add(node->rightChild);//當(dāng)前節(jié)點(diǎn)的右子樹(shù)入隊(duì)
maxWidth=Math.max(size,queue.size());
}
}
return maxWidth;//返回計(jì)算所得的最大的二叉樹(shù)的寬度。
}
總結(jié):
不管采用哪種方式,實(shí)際上還是利用了對(duì)二叉樹(shù)的遍歷的特點(diǎn)來(lái)進(jìn)行的。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- C++二叉樹(shù)結(jié)構(gòu)的建立與基本操作
- C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)的基本操作
- JS中的二叉樹(shù)遍歷詳解
- python數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)的建立實(shí)例
- 平衡二叉樹(shù)的左右旋以及雙旋轉(zhuǎn)的圖文詳解
- c++二叉樹(shù)的幾種遍歷算法
- 關(guān)于c#二叉樹(shù)的實(shí)現(xiàn)
- python數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)的遍歷實(shí)例
- 圖解二叉樹(shù)的三種遍歷方式及java實(shí)現(xiàn)代碼
- 二叉樹(shù)入門和刷題詳解
相關(guān)文章
C++使用一個(gè)棧實(shí)現(xiàn)另一個(gè)棧的排序算法示例
這篇文章主要介紹了C++使用一個(gè)棧實(shí)現(xiàn)另一個(gè)棧的排序算法,結(jié)合實(shí)例形式分析了C++借助輔助棧實(shí)現(xiàn)棧排序算法的相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
VC6實(shí)現(xiàn)激活后臺(tái)窗口最佳方法
這篇文章主要介紹了VC6實(shí)現(xiàn)激活后臺(tái)窗口最佳方法,實(shí)例分析了VC操作后臺(tái)窗口的技巧,需要的朋友可以參考下2015-06-06
C語(yǔ)言初識(shí)變量常量字符串轉(zhuǎn)義符及注釋方式簡(jiǎn)介
最強(qiáng)的C語(yǔ)言筆記,此處對(duì)于C語(yǔ)言的基礎(chǔ)部分做一個(gè)簡(jiǎn)要的介紹,作者實(shí)屬初學(xué),寫(xiě)博客也是作者學(xué)習(xí)的一個(gè)過(guò)程,若文中內(nèi)容有理解不到位或者有不當(dāng)之處,還請(qǐng)朋友們不吝指正2021-11-11
CreateCompatibleDC()函數(shù)案例詳解
這篇文章主要介紹了CreateCompatibleDC()函數(shù)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
簡(jiǎn)單談?wù)勱P(guān)于C++中大隨機(jī)數(shù)的問(wèn)題
這篇文章主要介紹了關(guān)于C++中大隨機(jī)數(shù)的問(wèn)題,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,有需要的朋友可以一起來(lái)學(xué)習(xí)學(xué)習(xí)。2017-01-01

