代码随想录算法训练营第十五天

news2024/11/15 13:30:13

力扣题部分:

110.平衡二叉树

题目链接:. - 力扣(LeetCode)

题面:

        给定一个二叉树,判断它是否是平衡二叉树

        平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1

思路(递归):

还是递归三部曲(关于三部曲的具体内容和对递归看法建议可见昨天的文章开头):

        传送门:代码随想录算法训练营第十四天-CSDN博客

确定递归函数的参数和返回值:

不仅仅需要bool判断,还要计算子树深度,所以需要再创建一个函数。

参数:TreeNode * cur,返回值类型:int。

确定终止条件:

如果当前节点为空,return 0。

如果当前节点为叶子节点 return 1。

确定单层递归的逻辑:

为了发现此树不为平衡树,我们需要把发现不平衡的记录传递回去。

所以一发现左右节点差 > 1,return -1。

不仅如此,一发现调用当前节点的左右节点后返回值为-1,同样return -1传递上去。

如果一切正常(没有接触到-1),就和计算最大深度差不多的操作:左右节点都有返回调用其中的最大值 + 1,如果只有左节点 返回调用左节点值 + 1,右节点同理。

如果到了最后,意味着当前节点没被传递-1且为叶子节点,return 1就可以了。

代码实现:

257. 二叉树的所有路径

题目链接. - 力扣(LeetCode)

题面:

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

思路(递归):

确定递归函数的参数和返回值:

最后返回的是字符串数组(restult),再弄一个函数void就可以了,在这个新函数里不断加入一个个字符串进最后的字符串数组里。

由于需要不断递归和相应的回溯操作,我们选择在最后用int数组(paths)转换成字符串,这样的话增删比字符串会方便很多,在此之前,遍历节点只需要把值压进int数组里就可以了。

确定终止条件:

当前节点为空或者当前节点为叶子节点且数组转换后时return;

确定单层递归的逻辑:

如果当前节点为叶子节点,把叶子节点值也压进path数组中,然后开始转换成字符串并压入result

如果当前节点不为叶子节点,先调用子节点,调用完记得将当前节点在path里pop掉

pop的使用其实就是回溯的体现。

代码实现:

404.左叶子之和

题目链接:. - 力扣(LeetCode)

题面:

给定二叉树的根节点 root ,返回所有左叶子之和。

思路(递归):

注意是判断左叶子,不是二叉树左侧节点!

确定递归函数的参数和返回值:

返回int,直接调用所给函数即可。

确定终止条件:

当前节点为空或叶子节点 return 0;

确定单层递归的逻辑:

先将leftsum 和 rightsum初始化

int leftsum = sumOfLeftLeaves(root->left);

int rightsum = sumOfLeftLeaves(root->right);

如果有左节点且子节点有左叶子节点,将初始化的值改成左叶子节点的值。

代码实现:

222.完全二叉树的节点个数

题目链接:. - 力扣(LeetCode)

题面:

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

思路(递归):

确定递归函数的参数和返回值:

返回int,直接调用所给函数即可。

确定终止条件:

当前节点为空return0。

确定单层递归的逻辑:

返回当前节点左节点的节点数 + 右节点的节点数 + 1(自己所占的一个节点数)。

代码实现:

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

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

相关文章

Vulnhub JIS-CTF靶机详解

项目地址 https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/ 修改靶机的网卡 开机时长按shift,进入此页面 选择root模式进入 将只读模式改为读写模式 mount -o remount,rw / 查看本机的网卡名称 …

【数据分享】《青海省统计年鉴》2000-2023

而今天要限时免费分享的数据就是2000-2023年间出版的《青海省统计年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 青海省,位于中国西北部,青藏高原的东北部,是一个资源丰富、民族众多的地区。…

利用WebSocket实现来单提醒和用户催单

文章目录 概要整体架构流程技术细节小结 概要 来单提醒: 业务场景:在电商平台、外卖平台等应用场景中,当有新的订单产生时,系统需要及时通知相关人员处理新订单。 目的:确保订单能够得到快速响应,提高客户…

XSS盲打与cookie劫持

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 XSS盲打(加载远程攻击payload) XSS偷cookie cookie收集 在线XSS收集平台的使用 1. BeeF框架的使用 BeeF简介 安装和使用 XSS 一些实战应用 1. XSS PDF 2. 公网投毒 3. 网站挂马…

WUP-CH34X ch34x系列芯片USB转串口通信uniapp插件使用说明

插件地址:WUP-CH34X 系列芯片USB转串口通信安卓库 简介 本文档是针对 CH340/CH341/CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104/CH9143的 USB 转串口安卓库的开发说明文档。 主要介绍如何使用芯片的 USB 转异步串口功能(以下简称 CH34XUART…

python 使用正则表达式判断图片路径是否是超链接

在Python中,判断一个给定的字符串(假设为图片路径)是否是网页链接(URL),你可以通过检查该字符串是否符合URL的基本格式来实现。虽然这个方法不能保证链接一定指向图片,但它能判断该字符串是否是…

La-Z-Boy EDI项目测试流程详解

在此前的文章《家居EDI:La-Z-Boy EDI 项目案例》中,为大家介绍了La-Z-Boy的EDI 需求以及在知行之桥EDI系统中的具体实现,本文主要为大家介绍La-Z-Boy EDI项目测试流程。 梳理需求文档 La-Z-Boy 提供的EDI资料主要包括:EDI 850订…

在IntelliJ IDEA中利用Git拉取项目

1 访问gitee或github,找到项目对应的仓库,并复制仓库地址。 2 打开IDEA,依次选择菜单:File->New->Project from Version Control 3 在弹出框中输入仓库路径(从第一步中gitee或github复制的路径)并点击Clone 4 在弹出框中输入gite…

Mybatis框架——使用案例详细教程

文章目录 一、项目创建1.1 创建 Idea 项目1.2 导入必要依赖 二、数据库配置2.1 创建数据库2.2 配置数据库连接信息 三、MyBatis 配置3.1 创建配置文件 mybatis-config.xml3.2 创建 SqlSessionFactory 实例 四、项目测试和运行4.1 创建实体类4.2 创建 mapper.xml 文件4.3 创建 m…

CentOS7安装Docker教程(含最新镜像地址)

文章目录 1 安装前必读2 安装Docker的详细步骤3 配置镜像加速 1 安装前必读 在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。 注意:本文的命令使用的是 root 用户…

UE基础 —— 工具和编辑器

目录 Level Editor Static Mesh Editor Material Editor Blueprint Editor Physics Asset Editor Behavior Tree Editor Niagara Editor UMG UI Editor Font Editor Sequencer Editor Animation Editor Control Rig Editor Sound Cue Editor Media Editor nDisp…

JUC-变量的线程安全

成员变量和静态变量是否线程安全? 如果它们没有共享,则线程安全,即没有被外部访问。 如果它们被共享了,根据它们的状态是否能够改变,又分两种情况 如果只有读操作,则线程安全 如果有读写操作,…

【图形学】TA之路-矩阵应用平移-旋转-大小

矩阵应用:在 Unity 中,Transform 和矩阵之间的关系非常密切。Transform 组件主要用于描述和控制一个物体在三维空间中的位置、旋转和缩放,而这些操作背后实际上都是通过矩阵来实现的 1. Transform 组件与矩阵的关系 Transform 组件包含以下…

java简单实现双链表代码

package com.se.day03.aGenericity.eDataStructrue;/*** 自定义一个双链表的数据结构。**/public class MyDoubleList<E> {//新创建容器时&#xff0c;头部和尾部元素都是null,size0;private Node head; //头部元素private Node tail; //尾部元素private int size; // …

特殊数组Z(前缀和)

前言&#xff1a;想了好一会才想到是前缀和来写&#xff0c;并且我一开始的是从考虑这个数和这个数后面一个数&#xff0c;导致边界烦了我好久 看了一下&#xff0c;考虑这个数和这个数前一个数更好 class Solution { public:vector<bool> isArraySpecial(vector<int…

按键按下,LED 点亮,但是,理论和现象不符

通过 Debug &#xff0c;解决了一个 Bug&#xff0c;很开心&#x1f604;&#xff0c;记录下 想实现的效果&#xff1a;按下 PB12 上的按钮&#xff0c;PA7 上的 LED 点亮&#xff1b;松开&#xff0c;LED 熄灭 单片机型号&#xff1a;STM32F103C8T6 PB12 为上拉电阻&#xf…

高可用负载均衡集群

高可用负载均衡集群 相比单点的负载均衡集群&#xff0c;高可用负载均衡集群可以解决以下两个问题。 1. real server某个服务down会怎么样&#xff1f;如何解决&#xff1f; 解决 自动调用好的real server 2. scheduler server down会怎么样&#xff1f;如何解决&#xff1f…

Docker容器管理之FAQ

一、前言 某次&#xff0c;某容器服务发现无法使用了&#xff0c;查看状态为restaring状态&#xff0c;后看是云主机重启了&#xff0c;导致本地的nfs-server未自动启动&#xff0c;导致关联的集群主机&#xff0c;远程挂载点无法使用&#xff0c;影响容器服务运行。故此&#…

Qt编译错误: error: msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set

方法一&#xff1a;清空构建目录 清空当前目录的多余文件即可&#xff0c;具体操作如下 一个正常的Qt项目刚被创建且没有编译时是这样的 一个main文件&#xff0c;一个pro文件&#xff0c;一个user文件&#xff0c;一个头文件(.h)&#xff0c;和一个源文件(.cpp)&#xff0c;一…

springsecurity的学习(四):实现授权

简介 springsecurity的授权&#xff0c;自定义授权失败的处理&#xff0c;跨域的处理和自定义权限校验方法的介绍 授权 权限系统作用 在后台进行用户权限的判断&#xff0c;判断当前用户是否有相应的权限&#xff0c;必须具有所需的权限才能进行相应的操作&#xff0c;以此…