树与二叉树之层次遍历、求二叉树宽度
发布日期:2021-06-29 15:42:44 浏览次数:2 分类:技术文章

本文共 1109 字,大约阅读时间需要 3 分钟。

1.层次遍历

算法思想:建立一个循环队列,先将二叉树头结点如队列,然后出队列,访问该结点,若该结点有左子树则左结点队列,如果有右子树入队列,然后出队访问,直到为空

void level(BTNode *p){	BTNode *queue[maxsize];	int front=0,rear=0;	BTNode *q;	if(p!=NULL)	{		rear=(rear+1)%maxsize;		queue[rear]=p;		while(front!=rear)		{			front=(front+1)%maxsize;			q=queue[front];			cout<
data; if(q->lchild!=NULL) { rear=(rear+1)%maxsize; queue[rear]=q->lchild; } if(q->rchild!=NULL) { rear=(rear+1)%maxsize; queue[rear]=q->rchild; } } }}

2.二叉树层次遍历应用之求二叉树的宽度

//对所有结点记录层数,通过层次遍历;最后对所有结点统计每一层的结点数,最大即为所求 typedef struct{	BTNode *p;	int lno;}St;int maxNode(BTNode *b){	St queue[maxsize];int front=0,rear=0;	BTNode *q;int max,Lno,i,j,n;	if(p!=NULL)	{		rear++;		queue[rear].p=b;		queue[rear].lno=1;		while(front!=rear)		{			front++;			q=queue[front].p;			Lno=queue[front].lno;			if(q->lchild!=NULL)			{				rear++;				queue[rear].p=q->lchild;				queue[rear].lno=Lno+1;			}			if(q->rchild!=NULL)			{				rear++;				queue[rear].p=q->lchild;				queue[rear].lno=Lno+1;			}		}		max=0;		for(i=1;i<=Lno;i++)		{			n=0;			for(j=1;j<=rear;j++)			{				if(queue[j].lno==i)					n++;				if(max

 

转载地址:https://codingchaozhang.blog.csdn.net/article/details/85257310 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:二叉树应用之遍历算法的改进
下一篇:树与二叉树之计算表达式的值、求二叉树的深度,查找结点值

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年05月01日 09时03分43秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章