求二叉树最大宽度
#include <iostream>
using namespace std;
typedef struct BiTreeNode
{
char data;
struct BiTreeNode *lchild,*rchild;
}BiTreeNode,*BiTree;
void createBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
T=new BiTreeNode;
T->data=ch;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
void preOrder(BiTree T)
{
if(T)
{
cout<<T->data;
preOrder(T->lchild);
preOrder(T->rchild);
}
}
int width(BiTree T)//求二叉树最大宽度
{
if(!T)
return 0;
else
{
BiTree Q[100];
int front=1,rear=1,last=1;
int temp=0,maxw=0;
Q[rear]=T;
while(front<=last)
{
BiTree p;
p=Q[front++];
temp++;
if(p->lchild)
Q[++rear]=p->lchild;
if(p->rchild)
Q[++rear]=p->rchild;
if(front>last)
{
last=rear;
if(temp>maxw)
maxw=temp;
temp=0;
}
}
return maxw;
}
}
int main()
{
BiTree T;
createBiTree(T);
preOrder(T);
cout<<endl;
int num;
num=width(T);
cout<<"该二叉树的最大宽度为:"<<num<<endl;
return 0;
}