一、递归
这里说的递归,并非是指整个函数递归,而是说其中一个子函数使用了递归。整个思路可以如下:要求取最大宽度,可以循环求取每一层的宽度,存入一个数组,然后在这个数组里求最大值即可,数组下标即层数(或高度)。对于求某一层的宽度,考虑把它写成一个子函数,参数考虑起始结点以及对应的层数,举例:对于根节点来说,其第三层的宽度,就是其左孩子的第二层的宽度与其右孩子的第二层的宽度之和。
这样,我们可以写出两个函数,我的如下:子函数LevelWidth函数返回特定起点开始的某个层的宽度,采用递归。
int LevelWidth(BT root,int level)//find the width of a level(amounts of nodes in the level).
{
if(!root)return 0;
else
{
if(level==1)return 1;
level=LevelWidth(root->lchild,level-1)+LevelWidth(root->rchild,level-1);
}
return level;
}
主函数Width返回某起点开始的树的最大宽度,使用循环。
int Width(BT root)//find the maximum width of the btree.
{
int width,i;
int w[20];
for(i=0;i<20;i++)w[i]=0;
if(!root)width=0;
else
{
for(i=0;i<=