本题要求实现一个函数,返回给定的二叉树的中最宽层次的结点数,这里最宽层次指的是该层上的结点最多。
函数接口定义:
int MaxWidth(BiTree T);
T是二叉树树根指针,MaxWidth函数统计T中每层结点数并返回最大值,空树返回0。
其中BinTree结构定义如下:
typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree;
输入样例:
输入为由字母和'#'组成的字符串,代表二叉树的扩展先序序列。例如对于如下二叉树,输入数据:
AB#DF##G##C##
输出样例(对于图中给出的树):
The max-width of the tree is 2.
一开始还想用递归做这个题,结果发现不大行,后来只能写了一个层序遍历过掉,就是处理每一层的节点那需要思考一下,附代码:
int max(int a,int b)
{
if(a>=b)return a;
else return b;
}
int MaxWidth(BiTree T)
{
BiTree d[110],t;
int maxa=1,num=1;
int head=0,end=0;
if(T)
{
d[end++]=T;
while(head!=end)
{ int e=0;
while(num--)
{
t=d[head++];
if(t->lchild){d[end++]=t->lchild;e++;}
if(t->rchild){d[end++]=t->rchild;e++;}
}
num=e;maxa=max(maxa,e);
}
return maxa;
}
}