当前位置:首页 > 编程笔记 > 正文
已解决

二叉树题目:层数最深叶子结点的和

来自网友在路上 182882提问 提问时间:2023-09-18 22:45:04阅读次数: 82

最佳答案 问答题库828位专家为你答疑解惑

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法一
    • 思路和算法
    • 代码
    • 复杂度分析
  • 解法二
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:层数最深叶子结点的和

出处:1302. 层数最深叶子结点的和

难度

4 级

题目描述

要求

给定一个二叉树的根结点 root \texttt{root} root,请你返回层数最深的叶子结点的和。

示例

示例 1:

示例 1

输入: root = [1,2,3,4,5,null,6,7,null,null,null,null,8] \texttt{root = [1,2,3,4,5,null,6,7,null,null,null,null,8]} root = [1,2,3,4,5,null,6,7,null,null,null,null,8]
输出: 15 \texttt{15} 15

示例 2:

输入: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] \texttt{root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]} root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
输出: 19 \texttt{19} 19

数据范围

  • 树中结点数目在范围 [1, 10 4 ] \texttt{[1, 10}^\texttt{4}\texttt{]} [1, 104]
  • 1 ≤ Node.val ≤ 100 \texttt{1} \le \texttt{Node.val} \le \texttt{100} 1Node.val100

解法一

思路和算法

由于层数最深的结点没有子结点,因此层数最深的结点一定是叶结点。计算层数最深的叶结点的和,即为计算层数最深的所有结点值总和。可以使用层序遍历实现。

从根结点开始依次遍历每一层的结点,在层序遍历的过程中需要区分不同结点所在的层,确保每一轮访问的结点为同一层的全部结点。遍历每一层结点之前首先得到当前层的结点数,即可确保每一轮访问的结点为同一层的全部结点。

对于每一层结点,遍历过程中可以得到当前层的结点值总和。

由于层序遍历访问结点的顺序为层数递增的顺序,因此最后遍历的层一定是层数最深的层。对于遍历的每一层,只要当前层至少有一个结点不是叶结点,则当前层一定不是层数最深的层,只有当遍历到的层的每个结点都是叶结点时,当前层才是层数最深的层,也是最后遍历的层。计算最后遍历的层的结点值总和,即可得到层数最深的所有结点值总和。

代码

class Solution {public int deepestLeavesSum(TreeNode root) {int sum = 0;Queue<TreeNode> queue = new ArrayDeque<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {sum = 0;int size = queue.size();for (int i = 0; i < size; i++) {TreeNode node = queue.poll();sum += node.val;if (node.left != null) {queue.offer(node.left);}if (node.right != null) {queue.offer(node.right);}}}return sum;}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是队列空间,队列内元素个数不超过 n n n

解法二

思路和算法

也可以使用深度优先搜索计算层数最深的叶结点的和。从根结点开始遍历二叉树,遍历过程中需要维护二叉树的最大层数与最大层数的结点值总和。规定根结点在第 0 0 0 层,对于每个非空结点,都可以得到其结点值与所在层,执行如下操作:

  • 如果当前结点所在层等于最大层数,则将当前结点值加到最大层数的结点值总和;

  • 如果当前结点所在层大于最大层数,则将最大层数设为当前结点所在层,将最大层数的结点值总和设为当前结点值。

然后对当前结点的非空子结点继续遍历。

遍历结束之后即可得到最大层数的结点值总和。

代码

class Solution {int maxLevel = 0;int sum = 0;public int deepestLeavesSum(TreeNode root) {dfs(root, 0);return sum;}public void dfs(TreeNode node, int level) {if (level == maxLevel) {sum += node.val;} else if (level > maxLevel) {maxLevel = level;sum = node.val;}if (node.left != null) {dfs(node.left, level + 1);}if (node.right != null) {dfs(node.right, level + 1);}}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是递归调用的栈空间,取决于二叉树的高度,最坏情况下二叉树的高度是 O ( n ) O(n) O(n)

查看全文

/2175407.html

相关文章:

  • Java手写约瑟夫问题算法和约瑟夫问题算法应用拓展案例
  • innovus: 各种padding一勺烩
  • 简单的分析下dart实现grpc客户端的流程,以helloworld为例
  • stm32--独立看门狗
  • GcExcel:Java 应用创建、修改和保存 Excel 电子表格 -Crack
  • 腾讯mini项目-【指标监控服务重构】2023-08-19
  • leetcode363周赛
  • new/delete, malloc/free 内存泄漏如何检测
  • 无涯教程-JavaScript - ODD函数
  • 阿里云无影电脑:免费体验无影云电脑3个月
  • 嵌入式学习笔记(25)串口通信的基本原理
  • 前后端分离技术逐步深入,让你更加深入理解Nginx+Tomcat
  • Linux学习第11天:字符设备驱动开发:一字一符总见情
  • windows彻底卸载unity
  • 前端html原生页面兼容多端H5和移动端适配方案
  • 系统性能调优:提升服务器响应速度
  • PHP通过pem文件校验签名异常
  • 【C++ Exceptions】Catch exceptions by reference!
  • 科技资讯|苹果虚拟纸可在Vision Pro中为广告、书籍等提供MR内容和动画
  • webpack静态资源上传到CDNS (阿里云 OSS,亚马逊 AWS S3,七牛云 Qiniu Cloud Kodo)webpack-plugin-cdns
  • VMware workstation 中centos7虚拟机在nat模式下怎么配置网卡,指定我想要的IP并且可以联网
  • Flask 使用 JWT(一)
  • 【ant-design-vue】ant-design-vue在uniapp使用时,auto-import失败报错
  • 一文通览腾讯云大数据ES、数据湖计算、云数据仓库产品新版本技术创新
  • cuda以及pytorch安装
  • Xilinx FPGA 7系列 GTX/GTH Transceivers (2)--IBERT
  • oracle创建数据库以及用户,并导入dmp格式数据
  • 每个高级前端工程师都应该知道的前端布局
  • 微软发现影响 Linux 和 macOS系统的 ncurses 库漏洞
  • 前后端开发接口联调对接参数
  • 线性代数的本质(一)——向量空间
  • Maven 工具学习笔记(基础)
  • reg与wire的用法,证明reg可以在右边,wire型在左边,来作组合逻辑处理。
  • 【JDK 8-函数式编程】4.5 Predicate
  • html网页制作期末大作业-网上花店商城html+css+javascript
  • 2023年11月25日PMP报名正式开始!附操作指南
  • 伦敦银时走势与获利机会
  • 【数据结构】单值二叉树 相同的树 翻转二叉树(五)
  • 从0搭建夜莺v6基础监控告警系统(一):基础服务安装
  • three.js——模型对象的使用材质和方法
  • Java手写红黑树
  • 华为HCIA(四)
  • MyBatis面试题(一)
  • ARM cortex-A7核LED灯点灯实验
  • vue学习-01vue入门
  • K8s(Kubernetes)学习(六)——Ingress
  • 8种LED显示屏的安装方式
  • zabbix学习1--zabbix6.x单机
  • 一文了解水雨情在线监测站的优势
  • QSlider风格设置
  • GaussDB(DWS)云原生数仓技术解析:湖仓一体,体验与大数据互联互通
  • 项目性能优化 - 并发编程合并文章详情页的 HTTP 请求次数
  • linux基础篇
  • MATLAB中filloutliers函数用法
  • 蓝桥杯2023年第十四届省赛真题-买瓜--Java题解
  • OpenText EnCase Mobile Investigator 查看、分析和报告被调查手机的证据
  • 83 # 静态服务中间件 koa-static 的使用以及实现
  • 计算机网络第四章——网络层(下)
  • 09MyBatisX插件
  • JMeter基础 —— 使用Badboy录制JMeter脚本!
  • 蓝牙核心规范(V5.4)10.1-BLE 入门笔记(1)
  • Java实现图书管理系统
  • 评价模型:层次分析法
  • 【免费内网穿透】cpolar从0开始使用
  • 面试中常见的算法题和其python实现
  • flask+python快速搭建
  • 手把手教你搭建农产品商城小程序:详细步骤解析
  • 信息化助力高校教育统计数据质量的提升
  • 4G模块驱动移植
  • 软件测试团队必看:测试指标 TOP 3 榜单
  • 【seata】引入seata导致原本自定义实现的RequestInterceptor失效
  • SSM - Springboot - MyBatis-Plus 全栈体系(七)
  • TypeScript逆变 :条件、推断和泛型的应用
  • OpenStack创建云主机并连接CRT
  • 04Spring的核心配置文件
  • 构建个人图床云盘—EasyImage的简单部署及远程访问配置
  • 计算机网络选择题笔记
  • 【AI语言大模型】文心一言功能使用介绍
  • JSP ssm 网上求职管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
  • 2021年电工杯数学建模A题高铁牵引供电系统运行数据分析及等值建模求解全过程论文及程序
  • List 获取前N条数据
  • 虹科分享 | 来自Redis7.2的一封信:亲爱的Programmer,当你......
  • 抖音小店经营指南:在兴趣电商背景下打造成功的抖音店铺
  • ts 泛型基础介绍
  • AOSP Android 系统源码编译出的framework.jar和android.jar之间的区别
  • 【实战】H5 页面同时适配 PC 移动端 —— 旋转横屏
  • 代码随想录算法训练营第55天 | ● 392.判断子序列 ● 115.不同的子序列
  • 构建本地Web小游戏网站:Ubuntu下的快速部署与公网用户远程访问
  • Unity中UI组件对Shader调色
  • PostgreSQL serial类型
  • redis 哨兵(sentinel)机制
  • 一键搭建免费eXtplorer在线文件管理器,远程登录实现文件随身存储
  • 计算机网络第五章——传输层(下)
  • 欧拉操作系统在线安装mysql8数据库
  • Matlab图像处理-HSI模型
  • 刷题统计(蓝桥杯)
  • Python 内置函数详解 (2) 逻辑运算
  • Java程序部署位windows服务
  • linux 强大的搜索命令 grep
  • 通过内网穿透实现远程连接群晖Drive,轻松实现异地访问群晖NAS
  • 99%的人还看了

    猜你感兴趣

    版权申明

    本文"二叉树题目:层数最深叶子结点的和":http://eshow365.cn/6-8940-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!