王道p150 14.假设二叉树采用二叉链表存储结构,设计一个算法,求非空二叉树 b的宽度(即具有结点数最多的那一层的结点个数) (c语言代码实现)

 采用层次遍历的方法求出所有结点的层次,并将所有结点和对应的层次放在一个队列中。然后通过扫描队列求出各层的结点总数,最大的层结点总数即为二叉树的宽度。

/*                       A

            B                        C

D                   E      F                 G     */

本题代码如下

int width(tree* t)
{quene q;tree p;int k;q.f = q.r = -1;//队列为空q.r++;q.data[q.r] = *t;//根结点进队q.level[q.r] = 1;//根结点层次为1while (q.f < q.r){q.f++;//出队p = q.data[q.f];//出队结点k = q.level[q.f];//出队结点的层次if (p->lchild != NULL)//左孩子进队{q.r++;q.data[q.r] = p->lchild;q.level[q.r] = k + 1;}if (p->rchild != NULL)//右孩子进队{q.r++;q.data[q.r] = p->rchild;q.level[q.r] = k + 1;}}int max = 0;//保留同一层最多的结点个数int i = 0;//i扫描队中的所有元素k = 1;//k表示从第一层开始查找int n;//n统计第k层中的结点个数while (i <=q.r){n = 0;while (i <=q.r && q.level[i] == k)//记录同一层有多少元素{n++;i++;}k = q.level[i];//将k等于下一层的层数if (n > max)//保留最大的nmax = n;}return max;
}

完整测试代码

#include<stdio.h>
#include<stdlib.h>
typedef struct treenode
{char data;struct treenode* lchild, * rchild;
}treenode,*tree;
typedef struct
{tree data[10];int level[10];int f, r;
}quene;
void buildtree(tree* t)
{char ch;ch = getchar();if (ch =='#')*t = NULL;else{*t = (treenode*)malloc(sizeof(treenode));(*t)->data = ch;(*t)->lchild = NULL;(*t)->rchild = NULL;buildtree(&(*t)->lchild);buildtree(&(*t)->rchild);}
}
int width(tree* t)
{quene q;tree p;int k;q.f = q.r = -1;//队列为空q.r++;q.data[q.r] = *t;//根结点进队q.level[q.r] = 1;//根结点层次为1while (q.f < q.r){q.f++;//出队p = q.data[q.f];//出队结点k = q.level[q.f];//出队结点的层次if (p->lchild != NULL)//左孩子进队{q.r++;q.data[q.r] = p->lchild;q.level[q.r] = k + 1;}if (p->rchild != NULL)//右孩子进队{q.r++;q.data[q.r] = p->rchild;q.level[q.r] = k + 1;}}int max = 0;//保留同一层最多的结点个数int i = 0;//i扫描队中的所有元素k = 1;//k表示从第一层开始查找int n;//n统计第k层中的结点个数while (i <=q.r){n = 0;while (i <=q.r && q.level[i] == k)//记录同一层有多少元素{n++;i++;}k = q.level[i];//将k等于下一层的层数if (n > max)//保留最大的nmax = n;}return max;
}
int main()
{tree t;buildtree(&t);int widthnum = width(&t);printf("二叉树的宽度为:%d", widthnum);return 0;
}

用ABD##E##CF##G##测试

/*                       A

            B                        C

D                   E      F                 G     */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/216401.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React UI界面:Ant Design初步

文章目录 初步回调函数变量输出 React初步 初步 Antd是一套非常现代的React组件库&#xff0c;是好多人用过的第一个组件库&#xff0c;但我对其印象最深的却是圣诞节彩蛋&#xff0c;只是上网一查才发现&#xff0c;一晃这么多年过去了。 先创建一个React项目&#xff0c;然…

实验室信息管理系统源码,LIS系统源码,lis源码

医学检验(LIS)管理系统源码&#xff0c;云LIS系统全套商业源码 随着全自动生化分析仪、全自动免疫分析仪和全自动血球计数器等仪器的使用&#xff0c;检验科的大多数项目实现了全自动化分析。全自动化分析引入后&#xff0c;组合化验增多&#xff0c;更好的满足了临床需要&…

RabbitMQ之发送者(生产者)可靠性

文章目录 前言一、生产者重试机制二、生产者确认机制实现生产者确认&#xff08;1&#xff09;定义ReturnCallback&#xff08;2&#xff09;定义ConfirmCallback 总结 前言 生产者重试机制、生产者确认机制。 一、生产者重试机制 问题&#xff1a;生产者发送消息时&#xff0…

记录华为云服务器(Linux 可视化 宝塔面板)-- 安全组篇

文章目录 前言安全组说明安全组的特性安全组的应用场景 进入安全组添加基本规则添加自定义规则如有启发&#xff0c;可点赞收藏哟~ 前言 和windows防火墙类似&#xff0c;安全组是一种虚拟防火墙&#xff0c;具备状态检测和数据包过滤功能&#xff0c;可以对进出云服务器的流量…

golang panic关键词执行原理与代码分析

使用的go版本为 go1.21.2 首先我们写一个简单的panic调度与捕获代码 package mainfunc main() {defer func() {recover()}()panic("panic test") }通过go build -gcflags -S main.go获取到对应的汇编代码 可以看到当我们调度panic时&#xff0c;Go的编译器会将这段…

《尚品甄选》:后台系统——权限管理之角色管理(debug一遍)

文章目录 一、权限管理介绍二、表结构的设计三、查询角色四、添加角色五、修改角色六、删除角色 一、权限管理介绍 在后台管理系统中&#xff0c;权限管理是指为了保证系统操作的安全性和可控性&#xff0c;对用户的操作权限进行限制和管理。简单的来说就是某一个用户可以使用…

2014年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2014 年考研管理类联考数学真题一、问题求解&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。真题&#xff08;2014-01&…

2024年襄阳中级工程师职称评审条件及要求

想要评审襄阳市中级工程师职称的小伙伴看过来&#xff0c;襄阳人社局对于评审所需的条件及要求如下。秋禾火带大家详细来了解一下 评审范围和人员要求 评审所申报的企业必须是在襄阳市注册登记满一年以上&#xff0c;正常运作的非公有制企业&#xff08;也就是私企&#xff09…

科普:多领域分布式协同仿真

分布式协同仿真是一种在分布式计算环境中进行协同工作的仿真方法。使用该方法进行协同仿真时&#xff0c;仿真任务将被分发到多个计算节点上&#xff0c;并且这些节点可以同时工作以模拟完整的系统行为。分布式协同仿真已被广泛应用于工程、科学和军事领域&#xff0c;以便更好…

Linux中vim的编译链接和gcc

gcc,g,gdb的安装 命令行写gcc,g,gdb根据提示安装:sudo apt install gcc/g/gdb gcc分布编译链接 (1)预编译: gcc -E main.c -o main.i (2)编译: gcc -S main.i -o main.s (3)汇编: gcc -c main.s -o main.o (4)链接 gcc main.o -o main 执行: ./main 或者:全路径/main 编译链…

LeetCode Hot100 108.将有序数组转为二叉搜索树

题目&#xff1a; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 方法&#xff1a; class Solution {public…

【Mybatis-Plus篇】Mybatis-Plus基本使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…