王道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;//根结点层次为1
	while (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)//保留最大的n
			max = 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;//根结点层次为1
	while (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)//保留最大的n
			max = 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     */

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

下一代图片压缩格式 AVIF

长期以来我们都在为了在网络上使用什么样的图片格式而进行纠结。我们所熟知的或者运用到 Web 应用中的图片格式无非就是 PNG、JPG、GIF、SVG 或者 WebP。 HEIC是一种图像格式&#xff0c;上线时间还比较短&#xff0c;只有4年左右。 自iOS 11和 macOS High Sierra&#xff08…

GPS 定位信息获取(北斗星通 GPS)

GPS 定位信息获取&#xff08;1&#xff09; 首先回顾北斗星通 GPS 数据获取&#xff08;1&#xff09;~&#xff08;5&#xff09; gps_pub.cpp 将接收到的串口数据转化为GPS的经纬度信息gps_path.cpp 将经纬度信息转化为全局坐标系下的XY值&#xff0c;以第一个GPS经纬度为…

快递批量查询高手软件,让你轻松掌握多家快递物流信息,提升工作效率

随着电子商务的繁荣和智能化物流的普及&#xff0c;快递行业在全球范围内迅速发展。在这个快节奏的时代&#xff0c;为了提高工作效率并更好地管理物流信息&#xff0c;一款强大的工具——快递批量查询高手软件应运而生。这款软件可以让你轻松掌握多家快递公司的物流信息&#…

C++ 实现位图

引出 面试题&#xff1a;给出 40 亿个不重复的无符号整数&#xff0c;没有排过序。给定一个无符号整数&#xff0c;如何快速判断这个数是否在这 40 亿个无符号整数中。[ 腾讯面试题 ] 想法一&#xff1a;将 40 亿个数据存放到 set 里面&#xff0c;然后再查找指定的无符号整数。…

PyCharm 安装插件Vue

一、打开PyCharm工具 File -> Settings -> Plugins 二、在项目中添加Vue.js的依赖项。 npm install vue 三、页面应用

Innux(特殊位与权限)

特殊位与权限 目录&#xff1a; 1. SUID 2. SGID 3. SBIT 4. 文件系统属性chattr权限 5. 管理员权限sudo 1. SUID 1.1 什么是SUID SUID只对二进制可执行文件才有效&#xff08;文件必须具备x权限&#xff09; 执行者对该程序有 x 权限 当前程序拥有SUID时&#xff0…

MySQL性能优化,SQL调优,SQL调优的手段

文章目录 对MySQL性能的优化的理解硬件和操作系统层面的优化架构设计层面的优化MySQL程序配置优化SQL优化 SQL调优有哪几种方式1.EXPLAIN2.SQL语句中IN包含的值不应过多3.SELECT语句务必指明字段名称4.当只需要一条数据的时候&#xff0c;使用limit 15.如果排序字段没有用到索引…

android系统新特性——用户界面以及系统界面改进

用户界面改进 Android用户界面改进最明显的就是MD了。MD是Google于2014年推出的设计语言&#xff0c;它是一套完整的设计系统&#xff0c;包含了动画、样式、布局、组件等一系列与设计有关的元素。通过对这些行为的描述&#xff0c;让开发者设计出更符合目标的软件&#xff0c…

Percepio Tracealyzer 4.8.1 视觉跟踪诊断解决方案

Percepio Tracealyzer 4.8.1 视觉跟踪诊断解决方案&#xff0c; 是使嵌入式软件开发人员能够深入了解其运行时系统。这样可以更轻松地调试系统级问题、查找软件设计缺陷以及测量软件时序和资源使用情况。确保您的代码可靠、高效且响应迅速。 视觉运行时洞察 在运行时将 X 射线视…

计算器的模拟实现

计算器的模拟实现 一、实验题目&#xff1a;计算器二&#xff1a;实验目的&#xff1a;三&#xff1a;实验内容与实现1&#xff1a;【实验内容】2&#xff1a;【实验实现】1.计算器界面的实现&#xff0c;如下图所示&#xff1a;2&#xff1a;各项功能的实现&#xff0c;如下图…

Linux常用命令——bg命令

在线Linux命令查询工具 bg 用于将作业放到后台运行 补充说明 bg命令用于将作业放到后台运行&#xff0c;使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号&amp;的效果是相同的&#xff0c;都是将其放到系统后台执行。 在Linux系统中执行某些操作时候&…

基于YOLOv5的视频计数 — 汽车计数实现

在视频中计数对象可能看起来有挑战性&#xff0c;但借助Python和OpenCV的强大功能&#xff0c;变得令人意外地易于实现。在本文中&#xff0c;我们将探讨如何使用YOLO&#xff08;You Only Look Once&#xff09;目标检测模型在视频流或文件中计数对象。我们将该过程分解为简单…

HCIA题目解析(1)

1、【多选题】关于动态 MAC 地址表说法正确的是&#xff1f; A、通过报文中的源MAC地址学习获得的动态MAC表项会老化 B、通过查看指定动态MAC地址表项的个数&#xff0c;可以获取接口下通信的用户数 C、在设备重启后&#xff0c;之前的动态表项会丢失 D、在设备重启后&…

车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体)

车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都…

C#,《小白学程序》第十九课:随机数(Random)第六,随机生成任意长度的大数(BigInteger)

1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// 除法运算为 Truffer…

【腾讯云云上实验室】向量数据库相亲社交应用实践

快速入口 &#x1f449;向量数据库_大模型知识库_向量数据存储_向量数据检索- 腾讯云 (tencent.com) 文章目录 前言1. 向量数据库概念及原理1.1 向量数据库概念1.2 向量数据库核心原理1.3 向量数据库优缺点1.4 向量数据库与传统数据库的区别 2. 腾讯云向量数据库的基本特性及优…

[数据结构]-红黑树

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、红黑树的…

可观测性建设实践之 - 日志分析的权衡取舍

指标、日志、链路是服务可观测性的三大支柱&#xff0c;在服务稳定性保障中&#xff0c;通常指标侧重于发现故障和问题&#xff0c;日志和链路分析侧重于定位和分析问题&#xff0c;其中日志实际上是串联这三大维度的一个良好桥梁。 但日志分析往往面临成本和效果之间的权衡问…

css加载会造成阻塞吗??

前言 前几天面试问到了这个问题&#xff0c;当时这个答得不敢确定哈哈&#xff0c;虽然一面还是过了 现在再分析下这个&#xff0c;总结下&#xff0c;等下次遇到就能自信得回答&#xff0c;666 准备工作 为了完成本次测试&#xff0c;先来科普一下&#xff0c;如何利用chr…

【UnLua】在 Lua 中定义 UE 反射类型

【UnLua】在 Lua 中定义 UE 反射类型 UEnum C UENUM(BlueprintType) enum class ETest : uint8 {Walking,Running,Sprinting,ALS_MAX UMETA(DisplayName"ALS MAX") };Test.generated.h #include "UObject/ObjectMacros.h" #include "UObject/Scri…