-
算法思想
采用层次遍历的思想。level为当前层数,last始终指向每层的最右结点,层次遍历出队一个元素和last指向的元素比较,若相同,层数加一,并将当前层数结点个数存到一个数组中,last指向下一层的最右结点。重复执行到队列为空时结束,然后在结点数数组中找到最大的结点数即为所求。
还可以采用以下思路,请读者自行编写程序。依然是采用层次遍历的方法,先求出所有结点的层次,并将所有结点和对应的层次放到一个队列中。然后通过扫描队列求出各层的结点总数,最大的层节点数即为所求。
#include<iostream>
using namespace std;
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建二叉树
void CreateBT(BiTree &T){
char ch;
cin>>ch; //先输入节点值
if(ch == '#') T=NULL; //递归结束建空树
else{
T = new BiTNode; ///生成结点
T->data=ch;
CreateBT(T->lchild);
CreateBT(T->rchild);
}
}
int Bwideth(BiTree T){
B