本题要求实现一个函数,返回给定的二叉树的中最宽层次的结点数,这里最宽层次指的是该层上的结点最多。
函数接口定义:
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.
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案:
int NodeNumber(BiTree T,int level) {
if (!T||level<1) return 0;
if (level == 1) return 1;
return NodeNumber(T->lchild, level - 1) + NodeNumber(T->rchild, level - 1);
}//递归计算level层的结点数
int HeightOfTree(BiTree T) {
if (!T) return 0;
if (!T->lchild && !T->rchild) return 1;
else {
return 1 + (HeightOfTree(T->lchild) > HeightOfTree(T->rchild) ? HeightOfTree(T->lchild) : HeightOfTree(T->rchild));
}
}//计算层数
int MaxWidth(BiTree T) {
int max = 0;
for (int i = 1; i <= HeightOfTree(T);i++) {
max = max < NodeNumber(T,i) ? NodeNumber(T,i) : max;
}
return max;
}