王道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.mzph.cn/news/182536.shtml

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

相关文章

生成式AI与预测式AI的主要区别与实际应用

近年来&#xff0c;预测式人工智能&#xff08;Predictive AI&#xff09;通过先进的推荐算法、风险评估模型、以及欺诈检测工具&#xff0c;一直在推高着该领域公司的投资回报率。然而&#xff0c;今年初突然杀出的生成式人工智能&#xff08;Generative AI&#xff09;突然成…

VMware如何导出和导入镜像OVF虚拟机(以unbuntu为例)

前言&#xff1a;我下载了一个unbuntu的系统镜像&#xff0c;基于这个镜像创建了一个unbuntu的虚拟机&#xff0c;辛辛苦苦配置需要的开发环境&#xff0c;如&#xff1a;安装了mysql&#xff0c;安装了jdk等&#xff0c;此时&#xff0c;我的同事可能需要也是同一套类似环境&a…

MySQL 中的锁(二)

8.4. 意向锁 但是在上面的例子这里头有两个问题&#xff1a; 如果我们想对大楼整体上 S 锁&#xff0c;首先需要确保大楼中的没有正在维修的楼层&#xff0c;如果有正在维修的楼层&#xff0c;需要等到维修结束才可以对大楼整体上 S 锁。 如果我们想对大楼整体上 X 锁&#xf…

Vue+Three.js,三维3d模型 虚拟人 glb gltf

准备 我们需要建立一个vue项目,这里我直接用vue-cli脚手架了。 Part 1:引入three.js 项目文件夹里打开终端窗口,并运行: npm install --save three在需要使用three.js的组件内引入 import * as THREE from threePart 2:创建容器 创建canvas标签,为3D渲染建立容器。…

[go 面试] 深入理解进程、线程和协程的概念及区别

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 在操作系统中,我们经常听到进程、线程和协程这些概念,它们都是用来描述执行单元的。接下来,我会详细解释这些概念以及它们之间的区别。 1. 进程(…

拼多多第三季度收入激增315%,远超阿里巴巴

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;拼多多(PDD)第三季度的收入增长了94%&#xff0c;远远超过了阿里巴巴(BABA)同期9%的增速。 据LSEG的数据&#xff0c;拼多多表示&#xff0c;其第三季度的收入为94.4亿美元&#xff0c;交易收入增…

现代C++之万能引用、完美转发、引用折叠

现代C之万能引用、完美转发、引用折叠 0.导语1.问题引入2.引入万能引用3.万能引用出现场合4.理解左值与右值4.1 精简版4.2 完整版4.3 生命周期延长4.4 生命周期延长应用5.区分万能引用6.表达式的左右值性与类型无关7.引用折叠和完美转发7.1 引用折叠之本质细节7.2 示例与使用7.…

零基础学Python的第四天||字符串(1)

字符串(1) 如果对自然语言分类&#xff0c;有很多中分法&#xff0c;比如英语、法语、汉语等&#xff0c;这种分法是最常见的。在语言学里面&#xff0c;也有对语言的分类方法&#xff0c;比如什么什么语系之类的。我这里提出一种分法&#xff0c;这种分法尚未得到广大人民群众…

linux 讨论题合集(个人复习)

常规文件的权限是什么&#xff1f;如何分配或修改这些权限&#xff1f;文件夹&#xff08;目录&#xff09;的权限是什么&#xff1f;显示常规文件和文件夹的区别 讨论&#xff1a;①常规的文件权限有四种&#xff0c;r可读、w可写、x可执行、-没有权限&#xff1b;②可以使用c…

oracle常用通用sql脚本——查询前用户的表空间信息

oracle常用通用sql脚本——查询前用户的表空间信息 一、查询前用户的表空间信息1、 查询当前用户的所有表空间2、 已G为单位3、 已MB为单位 二、以上俩段sql查出结果集存在差异的原因 一、查询前用户的表空间信息 1、 查询当前用户的所有表空间 SELECT * FROM dba_tablespace…

鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Extend扩展组件样式与stateStyles多态样式(十一)

一、Extend扩展组件样式 1、作用 前文提到可以使用Styles用于样式的扩展&#xff0c;在Styles的基础上&#xff0c;ArkTS语法还提供了Extend&#xff0c;⽤于扩展原生组件样式&#xff0c;包括Text、Button等等。 2、定义语法 Extend(UIComponentName) function functionNam…

如何优化 Elasticsearch 查询性能

优化 Elasticsearch 查询性能需要从多个方面入手。通过合理的索引设计、优化查询语句、优化硬件资源和集群架构等方面的优化&#xff0c;可以显著提高 Elasticsearch 的查询性能。 1.索引设计优化 良好的索引设计是优化 Elasticsearch 查询性能的关键。可以通过以下几个方面来…

错误 LNK2001 无法解析的外部符号 __imp__CrtDbgReport

”属性“ -->”设置“ --> ”c“ – > ”代码生成“ --> ”运行库“ &#xff0c;将 ”多线程(MT)“ 改为 ”多线程(MTD)“。

C语言——从终端(键盘)读入 20 个数据到数组中,统计其中正数的个数,并计算这些正数之和

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i0;int sum0;int count0;int arr[20];printf("输入20个数据&#xff1a;\n");for(i1;i<20;i){scanf("%d",&arr[i]);if(arr[i]>0){count;sumarr[i];}}printf("正…

Flink-时间窗口

在流数据处理应用中&#xff0c;一个很重要、也很常见的操作就是窗口计算。所谓的“窗口”&#xff0c;一 般就是划定的一段时间范围&#xff0c;也就是“时间窗”&#xff1b;对在这范围内的数据进行处理&#xff0c;就是所谓的 窗口计算。所以窗口和时间往往是分不开的。 时…

IELTS学习笔记_grammar_新东方

参考&#xff1a; 新东方 田静 语法 目录&#xff1a; 导学简单句… x.1 导学 学语法以应用为主。 基础为&#xff1a;单词&#xff0c;语法 进阶为&#xff1a;听说读写译&#xff0c;只考听说读写。 words -> chunks -> sentences, chunks&#xff08;语块的重要…

计算机基础知识61

JsonResponse 功能例子 你自己写一个类&#xff0c;实现JsonResponse 功能&#xff0c;不需要传safeFalse&#xff0c;无论字典或列表&#xff0c;都能完成序列化返回给前端 1 响应头例子 四种情况&#xff0c;在响应头返回数据 xxxx # 第一种情况 JsonResponse def show(req…

Linux dig指令的十三种用法

文章目录 dig指令有哪些作用dig 具体用法推荐阅读 dig指令有哪些作用 DIG命令(Domain Information Groper命令)是一个网络工具&#xff0c;具有基本的命令行接口&#xff0c;用于进行不同的DNS(域名系统)查询。您可以使用DIG命令: 诊断您的域名服务器。检查所有这些服务器或每…

【C 语言经典100例】C 练习实例5

题目&#xff1a;输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 程序分析&#xff1a;我们想办法把最小的数放到x上&#xff0c;先将x与y进行比较&#xff0c;如果x>y则将x与y的值进行交换&#xff0c;然后再用x与z进行比较&#xff0c;如果x>z则将x与z的值…

MySQL安装部署-8.0.33-脚本

#!/bin/bash set -o pipefail# 参数 # mysql_install.sh <MYSQL_PORT> <MYSQL_VERSION> <MYSQL_DATA_BASE> # sh db_install.sh 3308 5.6 /home/data # <MYSQL_DATA_BASE> &#xff1a;因为测试环境数据目录一般在 /home/data 下&#xff0c;线上在 /…