//二叉树第i层结点个数intLevelNodeCount(BiTree T,int i){if(T ==NULL|| i <1)return0;if(i ==1)return1;returnLevelNodeCount(T->lchild, i -1)+LevelNodeCount(T->rchild, i -1);}intGetDepthOfBiTree(BiTree T){if(T ==NULL)return0;returnGetDepthOfBiTree(T->lchild)>GetDepthOfBiTree(T->rchild)?GetDepthOfBiTree(T->lchild)+1:GetDepthOfBiTree(T->rchild)+1;}intMaxWidth(BiTree T){int per =0;int max =0;for(int i =1; i <=GetDepthOfBiTree(T); i++){per =LevelNodeCount(T, i);if(per > max)max = per;}return max;}
2.2法二: 顺序队列实现层序遍历
intMaxWidth(BiTree T){if(T ==NULL)return0;BiTree queue[100]={0};BiTree cur =NULL;int begin =0, end =0;int perLevel =0, max =0;//每入队一个结点 end++表示有效数据加一queue[end++]= T;//begin != end: 队中还有结点 还未取到上一层所有结点的子结点while(begin != end){perLevel = end - begin;if(perLevel > max)max = perLevel;//cur指向队头结点 (马上就要被遗弃 因为已经被访问)//begin++表示当前结点已被遍历 当前结点被遗弃cur = queue[begin++];if(cur->lchild)queue[end++]= cur->lchild;if(cur->rchild)queue[end++]= cur->rchild;}return max;}