您的位置:首页 > 其它

求二叉树宽度

2016-03-19 10:00 381 查看
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define MAXSIZE 100

typedef struct BTNode
{
struct BTNode *lchild,*rchild;
int data;
}BTNode,*btnode;

typedef struct
{
btnode p;
int lno;
}St;

void createBtree(btnode &T)
{
int t;
scanf("%d",&t);
if(t==0)
T=NULL;
else
{
T=(btnode)malloc(sizeof(BTNode));
T->data=t;
createBtree(T->lchild);
createBtree(T->rchild);
}
}

int maxWidth(btnode &b)
{
St que[MAXSIZE];
int front,rear,n;
int Lno,i,j,max;
btnode q;
front=rear=0;
if(b)
{
++rear;
que[rear].p=b;
que[rear].lno=1;
while(front!=rear)
{
++front;
q=que[front].p;
Lno=que[front].lno;
if(q->lchild)
{
++rear;
que[rear].p=q->lchild;
que[rear].lno=Lno+1;
}
if(q->rchild)
{
++rear;
que[rear].p=q->rchild;
que[rear].lno=Lno+1;
}
}
max=0;
for(i=1;i<=Lno;i++)
{
n=0;
for(j=1;j<=rear;j++)
if(que[j].lno==i)
++n;
if(n>max)
max=n;
}
return max;
}
else
return 0;
}

void main()
{
btnode T;
int w;
createBtree(T);
w=maxWidth(T);
printf("width=%d\n",w);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: