求二叉樹寬度

2021-10-21 19:53:04 字數 1419 閱讀 5092

題目

乙個二叉樹採用二叉鍊錶儲存,設計乙個函式計算這個二叉樹的寬度

解題思路

採用層次遍歷,將每乙個結點的資訊儲存在陣列中,結點的資訊包括這個結點的層數,以及結點的左右子樹,資料型別(為char型字元),然後對這個陣列進行遍歷,層號數目最多的即為該二叉樹最大寬度處的層號,然後計算這個層號的數目,即為最大寬度

函式原始碼

int maxnode

(btnode *b)

//求該二叉樹的寬度,也就是二叉樹中最大的度

if(q-

>rchild!=

null)}

//注意,當迴圈結束的時候,lno儲存的是這棵二叉樹的最大層數

//然後找出來含有結點最多的層中的節點數目

max=0;

for(i=

0;i<=lno;

++i)

if(max

return max;

}else

}

待檢測的二叉樹

測試程式完整原始碼

#include

using namespace std;

typedef char mytype;

#define maxsize 10000

//給這個佇列盡可能大的空間

//二叉樹鍊錶結點

typedef struct btnodebtnode;

//定義特殊的結構型,用於儲存結點指標以及指標所在的層次號

typedef struct st

st;//構造二叉樹

btnode *

createbinarytree()

//利用遞迴思想構造二叉樹

else

returnt;

}int maxnode

(btnode *b)

//求該二叉樹的寬度,也就是二叉樹中最大的度

if(q-

>rchild!=

null)}

//注意,當迴圈結束的時候,lno儲存的是這棵二叉樹的最大層數

//然後找出來含有結點最多的層中的節點數目

max=0;

for(i=

0;i<=lno;

++i)

if(max

return max;

}else

}int main()

測試結果為4,正確!

二叉樹系列五 求二叉樹的寬度

二叉樹的寬度是指二叉樹各層結點個數的最大值。求二叉樹的寬度可以依據與二叉樹的層次遍歷,我們知道,二叉樹的層次遍歷借助於deque實現,每次列印當前結點後將其左子樹右子樹入隊,此時佇列中既包含當前層的結點,也包含下一層的結點,若我們將當前層的結點全部出隊,剩餘的就是下一層的結點個數。所以,我們可以使用...

求二叉樹的深度和寬度

求二叉樹的深度和寬度.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std struct btnode 先序建立二叉樹 void creatbtree btnode root else 求二叉樹的深度 int g...

求二叉樹的深度和寬度

二叉樹的深度 從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。二叉樹的寬度 二叉樹的每一層中都有一定數量的節點,節點數最多的那一層的節點數叫做二叉樹的寬度。假設二叉樹的節點有如下資料結構 struc node 1 求二叉樹的深度 根據剛才對二叉樹深度的說明,...