問題:統計二叉樹的寬度
算法思想:運用遞歸的方法依次統計每一層的寬度,存放進數組中,最后求出數組最大元素的值,即是二叉樹的寬度。
代碼如下:
1 void LevelWidth(BiTree T, int a[], int h) //求每一層的寬度 2 { //第一次調用為LevelWidth(T,a,0); 3 if(T!=NULL) 4 { 5 a[h] += 1; 6 LevelWidth(T->lchild, a, h + 1); 7 LevelWidth(T->rchild, a, h + 1); 8 } 9 } 10 11 int Width(BiTree T) //求二叉樹的寬度 12 { 13 int a[MaxSize], h = 0; //默認二叉樹從第0層開始 14 for (int i = 0; i <MaxSize; i++) 15 a[i] = 0; //初始化,每一層寬度為0 16 LevelWidth(T, a, h); //調用求每一層寬度的函數,把寬度保存在數組a[]里 17 int wid = a[0]; 18 for (int i = 1; i <MaxSize; i++) //遍歷數組a[i]求最大值,即樹的寬度 19 if (a[i] > wid) 20 wid = a[i]; 21 return wid; 22 }
轉載於:https://blog.csdn.net/qq_36645322/article/details/102711846