求二叉树宽度

来源:互联网 发布:刘项原来不读书 知乎 编辑:程序博客网 时间:2024/04/30 18:35
#include<stdio.h>#include<stdlib.h>#define NULL 0#define MAXSIZE 100typedef 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);}
0 0