求二叉树宽度


问题:统计二叉树的宽度

算法思想:运用递归的方法依次统计每一层的宽度,存放进数组中,最后求出数组最大元素的值,即是二叉树的宽度。

代码如下:

 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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM