6-8 最宽层次结点数 分数 10
文章目录
- 1.题目描述
- 2.本题ac答案
- 2.1法一: 代码复用
- 2.2法二: 顺序队列实现层序遍历
- 3.C++层序遍历求最大宽度
- 3.1层序遍历代码
- 3.2求最大宽度
1.题目描述

2.本题ac答案
2.1法一: 代码复用

//二叉树第i层结点个数
int LevelNodeCount(BiTree T, int i)
{if (T == NULL || i < 1)return 0;if (i == 1) return 1;return LevelNodeCount(T->lchild, i - 1) + LevelNodeCount(T->rchild, i - 1);
}
int GetDepthOfBiTree(BiTree T)
{if (T == NULL)return 0;return GetDepthOfBiTree(T->lchild) > GetDepthOfBiTree(T->rchild) ? GetDepthOfBiTree(T->lchild) + 1: GetDepthOfBiTree(T->rchild) + 1;
}
int MaxWidth(BiTree T)
{int per = 0;int max = 0;for (int i = 1; i <= GetDepthOfBiTree(T); i++){per = LevelNodeCount(T, i);if (per > max)max = per;}return max;
}
2.2法二: 顺序队列实现层序遍历
int MaxWidth(BiTree T)
{if (T == NULL)return 0;BiTree queue[100] = { 0 };BiTree cur = NULL;int begin = 0, end = 0;int perLevel = 0, max = 0;//每入队一个结点 end++表示有效数据加一queue[end++] = T;//begin != end: 队中还有结点 还未取到上一层所有结点的子结点while (begin != end){perLevel = end - begin;if (perLevel > max)max = perLevel;//cur指向队头结点 (马上就要被遗弃 因为已经被访问)//begin++表示当前结点已被遍历 当前结点被遗弃cur = queue[begin++];if (cur->lchild)queue[end++] = cur->lchild; if (cur->rchild)queue[end++] = cur->rchild;}return max;
}
3.C++层序遍历求最大宽度
3.1层序遍历代码
void LevelTraverse(BiTNode* T)
{if (T == nullptr)return;queue<struct BiTNode*> q;q.push(T);while (!q.empty()){BiTNode* front = q.front();cout << front->data;q.pop();if (front->lchild)q.push(front->lchild);if (front->rchild)q.push(front->rchild);}cout << endl;
}
3.2求最大宽度
typedef char ElemType;
typedef struct BiTNode
{ElemType data;struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
int MaxWidth(BiTree T)
{if (T == nullptr)return 0;queue<BiTree> q;q.push(T);int max = 0;while (!q.empty()){//当前层结点数int perLevel = q.size(); if (perLevel > max)max = perLevel;//for循环的作用://遍历当前栈中的结点 拿出一个结点node 把它的孩子入栈后就删除node//此时栈中存的结点是下一层结点for (int i = 0; i < perLevel; i++){BiTree front = q.front();q.pop();if (front->lchild) q.push(front->lchild);if (front->rchild)q.push(front->rchild);}}return max;
}
相关文章:
6-8 最宽层次结点数 分数 10
文章目录 1.题目描述2.本题ac答案2.1法一: 代码复用2.2法二: 顺序队列实现层序遍历 3.C层序遍历求最大宽度3.1层序遍历代码3.2求最大宽度 1.题目描述 2.本题ac答案 2.1法一: 代码复用 //二叉树第i层结点个数 int LevelNodeCount(BiTree T, int i) {if (T NULL || i < 1)re…...
Linux学习第28天:Platform设备驱动开发(二): 专注与分散
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、硬件原理图分析 四、驱动开发 1、platform设备与驱动程序开发 53 /* 54 * 设备资源信息,也就是 LED0 所使用的所有寄存器 55 */ 56 static str…...
postgresql数组重叠(有共同元素)查询
直接上最终代码: select distinct id from a where string_to_array(in_area,,) && (select ARRAY_AGG( code) from areas where code like 11% or code 100000)::TEXT[] pg语法: 表 9.48显示了可用于数组类型的运算符。 表 9.48。数组运算符…...
ubuntu系统 生成RSA密钥对
在Ubuntu系统上生成密钥对通常指的是生成SSH密钥对,它常用于安全的远程登录、数据通信和其他安全网络操作。以下是如何在Ubuntu系统上生成SSH密钥对的步骤: 打开终端:你可以使用快捷键 Ctrl Alt T 在Ubuntu上打开一个终端窗口。 运行ssh-k…...
【RtpSeqNumOnlyRefFinder】webrtc m98: ManageFrameInternal 的帧决策过程分析
Jitterbuffer(FrameBuffer)需要组帧以后GOP内的参考关系 JeffreyLau 大神分析 了组帧原理而参考关系(RtpFrameReferenceFinder)的生成伴随了帧决策 FrameDecisionFrameDecision 影响力 帧的缓存。调用 OnAssembledFrame 传递已经拿到的RtpFrameObject 那么,RtpFrameObject…...
centos系统源码编译安装nginx,并编写服务脚本
1.安装编译所需的依赖项: yum install -y gcc pcre-devel openssl-devel zlib-devel2.下载 Nginx 源代码: wget http://nginx.org/download/nginx-1.21.3.tar.gz tar -xf nginx-1.21.3.tar.gz cd nginx-1.21.33.配置编译选项并进行编译和安装ÿ…...
2023下半年软考高项答题技巧!
2023下半年软考倒计时最后一天,一些软考高项答题技巧分享! 高项答题技巧 1、综合知识 (1)首先是分析试题的技巧 –先看清楚问题,再看选项; –判断题目到底考察的是什么知识点,排除干扰项。…...
windows server 2016调优
1. 增加TCP连接的最大数量: 在您当前的注册表路径(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters)中的右侧窗格,右击空白处,选择“新建” -> “DWORD (32位) 值”。为新的值命名为TcpNu…...
Qt 插件开发详解
1.简介 Qt插件是一种扩展机制,用于将应用程序的功能模块化,并且可以在运行时动态加载和卸载。Qt框架为插件提供了一套标准的接口和管理机制,使得插件的使用和集成变得简单和灵活,通过插件机制,可以将应用程序的功能划…...
vue需求:实现签章/签字在页面上自由定位的功能(本质:元素在页面上的拖拽)
目录 第一章 效果展示 第二章 了解工具 2.1 draggable 2.1.1 了解draggable 2.1.2 draggable方法 2.1.3 利用例子理解方法 第三章 效果实现 3.1 实现思路 3.2 代码实现 3.2.1 涉及到的点 3.2.2 源代 第一章 效果展示 效果描述:通过点击左边栏的签名和…...
【深度学习基础】Pytorch框架CV开发(1)基础铺垫
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
uniapp原生插件之安卓热敏打印机打印插件
插件介绍 安卓热敏打印机打印插件,自动授权,打印机连接监听,打印文本,条形码,二维码,切纸,打印机状态,打印结果查询等 插件地址 安卓热敏打印机打印插件 - DCloud 插件市场 超级…...
巴菲特:卖比亚迪有助于资金配置
巴菲特表示,未来可能会有更多银行倒闭,但储户不必担心,他警告说,陷入困境的银行股不是价值投资,因为即使政府采取行动保护储户,股东的权益也会受到损失。他称,将加大对日本综合商社的投资&#…...
香港服务器有哪些特点
香港服务器具有以下特点: 速度快:香港服务器地理位置优越,与内地服务器相比,网络延迟更低,访问速度更快。 稳定性高:香港服务器位于全球重要的金融中心,网络环境稳定,服务器稳定性高…...
Leetcode76最小覆盖子串
思路:滑动窗口思想 1. 滑动窗口是什么:用一个滑动窗口为覆盖目标子串的字符串 2.怎么移动窗口:当不满足覆盖时右指针移动扩大范围,当覆盖了就移动左指针缩减范围直到再次不覆盖 3. 怎么判断是否覆盖:这里使用两个哈…...
GD32 单片机 硬件I2C死锁解决方法
死锁的复现方式 在I2C恢复函数下个断点(检测到I2C多次超时之后,应该能跳转到I2C恢复函数)使用镊子,将SCL与SDA短接,很快就能看到程序停到恢复函数的断点上,此时再执行恢复函数,看能否正常走出&…...
SPSS两相关样本检验
前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…...
【vscode远程开发】使用内网穿透实现在公网环境下远程访问
文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…...
KaiwuDB 内核解析 - SQL 查询的生命周期
一、概述 KaiwuDB 内核解析系列共分上下两部分,本文是该系列的第一部分,主要涵盖了网络协议到 SQL 执行器,解释 KaiwuDB 如何执行 SQL 查询,包括系统各个组件的执行路径(网络协议、SQL 会话管理、解析器、执行计划及优…...
2023.11.03 homework
小学4年级数学 1 2 3 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 19…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
