问题:统计二叉树的宽度
算法思想:运用递归的方法依次统计每一层的宽度,存放进数组中,最后求出数组最大元素的值,即是二叉树的宽度。
代码如下:
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