題目
乙個二叉樹採用二叉鍊錶儲存,設計乙個函式計算這個二叉樹的寬度解題思路
採用層次遍歷,將每乙個結點的資訊儲存在陣列中,結點的資訊包括這個結點的層數,以及結點的左右子樹,資料型別(為char型字元),然後對這個陣列進行遍歷,層號數目最多的即為該二叉樹最大寬度處的層號,然後計算這個層號的數目,即為最大寬度函式原始碼
待檢測的二叉樹int maxnode
(btnode *b)
//求該二叉樹的寬度,也就是二叉樹中最大的度
if(q-
>rchild!=
null)}
//注意,當迴圈結束的時候,lno儲存的是這棵二叉樹的最大層數
//然後找出來含有結點最多的層中的節點數目
max=0;
for(i=
0;i<=lno;
++i)
if(max
return max;
}else
}
測試程式完整原始碼
測試結果為4,正確!#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()
二叉樹系列五 求二叉樹的寬度
二叉樹的寬度是指二叉樹各層結點個數的最大值。求二叉樹的寬度可以依據與二叉樹的層次遍歷,我們知道,二叉樹的層次遍歷借助於deque實現,每次列印當前結點後將其左子樹右子樹入隊,此時佇列中既包含當前層的結點,也包含下一層的結點,若我們將當前層的結點全部出隊,剩餘的就是下一層的結點個數。所以,我們可以使用...
求二叉樹的深度和寬度
求二叉樹的深度和寬度.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std struct btnode 先序建立二叉樹 void creatbtree btnode root else 求二叉樹的深度 int g...
求二叉樹的深度和寬度
二叉樹的深度 從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。二叉樹的寬度 二叉樹的每一層中都有一定數量的節點,節點數最多的那一層的節點數叫做二叉樹的寬度。假設二叉樹的節點有如下資料結構 struc node 1 求二叉樹的深度 根據剛才對二叉樹深度的說明,...