求二叉树的宽度的程序 完整的

来源:百度知道 编辑:UC知道 时间:2024/06/23 03:22:54
1楼你的程序有以下错误 怎么改
D:\C++\MSDev98\MyProjects\aaa\aaa.cpp(5) : error C2065: 'BinTree' : undeclared identifier
D:\C++\MSDev98\MyProjects\aaa\aaa.cpp(5) : error C2146: syntax error : missing ')' before identifier 'T'
D:\C++\MSDev98\MyProjects\aaa\aaa.cpp(5) : error C2059: syntax error : ')'
D:\C++\MSDev98\MyProjects\aaa\aaa.cpp(6) : error C2143: syntax error : missing ';' before '{'
D:\C++\MSDev98\MyProjects\aaa\aaa.cpp(6) : error C2447: missing function header (old-style formal list?)
执行 cl.exe 时出错.

aaa.exe - 1 error(s), 0 warning(s)

要求二叉树的宽度的话,则可根据树的高度设置一个数组temp。temp[i]用于存放第i层上的结点数(即宽度)。在访问结点时,把相应计算该结点下一层的孩子数并存入相应数组元素中,遍历左子树后向上返回一层计算右子树的宽度,并取出最大的一个数组元素作为树的宽度。

#define M 10 //假设二叉树最多的层数
int Width(BinTree T)
{
int static n[M];//向量存放各层结点数
int static i=1;
int static max=0;//最大宽度
if(T)
{
if(i==1) //若是访问根结点
{
n[i]++; //第1层加1
i++; //到第2层
if(T->lchild)//若有左孩子则该层加1
n[i]++;
if(T->rchild)//若有右孩子则该层加1
n[i]++;
}
else
{ //访问子树结点
i++; //下一层结点数
if(T->lchild)
n[i]++;
if(T->rchild)
n[i]++;
}
if(max<n[i])max=n[i];//取出最大值
Width(T->lchild);//遍历左子树
i--; //往上退一层
Width(T->rchild);//遍历右子树
}
return max;
}//算法结束