标签:nod node 存储 ++ for循环 int 队列 数组 层次遍历
//使用层次遍历二叉树的最大宽度 typedef struct { Btnode * p; //结点指针 int lno; //节点所在层号 }St int maxNode(BTnode *b) { //创建一个顺序非循环队列 St que[maxsize]; int front,rear; fronf = rear = 0; int Lno,i,j,n,max; //Lno 用来存储最大层号,max用来存储最大宽度 //使用i,j来遍历数组,得到max //创建一个工作指针 BTnode *q; if(b!=NULL) { //根节点入队 ++rear; que[rear].p=b; que[rear].lno=1;//树根所在层次为1 while (front!=rear) { //队头出队 ++front; q = que[front].p; Lno = que[front].lno; //关键语句,保存当前层层号 if (q->lchild!=NULL)//左子树不空则左子树进队 { ++rear; que[rear].p=q->lchild; que[rear].lno=Lno+1; //关键语句,子树的层次=根的层次+1 } if (q->rchild!=NULL)//右子树不空则右子树进队 { ++rear; que[rear].p=q->rchild; que[rear].lno=Lno+1; //关键语句,孩子节点层次=根的层次+1 } //循环结束后,Lno 就保存了此树的最大层次,然后使用一个求和就可以求出最大宽度 } max = 0; //使用两个for循环达到找出最大宽度的目的 for (i=1;i<=Lno;++i) { n=0 for(j=1;j<=rear;++j)//因为是从下标1处存节点数据的,所以j从1开始遍历 { if(que[j]==i) ++n; if (max<n) max=n; } } return max; } return 0;//树为空,则返回0 }
标签:nod node 存储 ++ for循环 int 队列 数组 层次遍历
原文地址:https://www.cnblogs.com/Eric-Chou/p/12034543.html