代码随想录day17

news2024/11/25 0:22:24

110. 平衡二叉树

 

 

首先是明白什么是平衡二叉树:

一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

然后,区别二叉树的高度和深度:

        二叉树的高度:从叶子节点到根节点

        二叉树的深度:从根节点到叶子节点

那么对于这道题来说,既然是求高度,那么我们就选择后序遍历的方式,逐渐向上返回子树的高度。可以用-1来标识以当前节点为根节点的左右子树是否为平衡二叉树,如果在过程中有一棵子树的返回值是-1,那么整个树必然不是一个平衡二叉树,如果没有返回-1,那么就正常返回当前树的高度就可以了

代码:

        

def isBalanced(self, root: Optional[TreeNode]) -> bool:
        return self.count_high(root)!=-1

    def count_high(self,node):
        result = 0
        if not node:
            return True
        left = self.count_high(node.left)
        right = self.count_high(node.right)
        if left==-1 or right==-1 or abs(left-right)>1:
            return -1 
        return max(left, right) + 1

 

257. 二叉树的所有路径

 

 

思路:现在开始涉及到一个回溯算法了,首先知道递归和回溯是相辅相成的,有了递归就肯定有回溯。就拿这道题目来说,当从root开始出发,先左子树1->3->5。这是左边的路径保存起来之后,这里就是当我们的左右孩子都为空的时候,说明当前这条路径就已经判断完了,然后就要回到上一个节点,去看他还有没有其他的路径可以继续走,如果还是没有,那么就继续返回上一个节点,直到有新的路径出现为止。

这里稍微注意一下输出格式中有‘->',这里的map函数就是每次保存节点的时候都是以字符形式保存,然后再插入->。

代码:

        

def traversal(self, cur, path, result):
        path.append(cur.val)  # 中
        if not cur.left and not cur.right:  # 到达叶子节点
            sPath = '->'.join(map(str, path))
            result.append(sPath)
            return
        if cur.left:  # 左
            self.traversal(cur.left, path, result)
            path.pop()  # 回溯
        if cur.right:  # 右
            self.traversal(cur.right, path, result)
            path.pop()  # 回溯

    def binaryTreePaths(self, root):
        result = []
        path = []
        if not root:
            return result
        self.traversal(root, path, result)
        return result

404. 左叶子之和

 

文字游戏来了,什么是叶子节点?就是当前左右孩子都为空。

什么是左叶子节点,就是说当前节点的左孩子不为空,但是左孩子的左右孩子都为空,这就是左叶子节点。那么左边的子树判断完了,就该轮到右子树来了,右子树的左孩子如果既没有左孩子也没有右孩子,那么这也是右子树的左叶子节点。所以递归右子树就好了。

那么如果说当前的左孩子还有孩子,那么就直接分别递归左右子树直到找到他的左右子树的左叶子节点

 代码:

def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0 
        if root.left!=None and root.left.left==None and root.left.right==None:
            return root.left.val +self.sumOfLeftLeaves(root.right)
        else:
            return self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)

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

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

相关文章

【C语言】多组输入

C系列文章目录 目录 C系列文章目录 一、什么是多组输入? 二、如何使用多组输入 2.1,试题举例讲解 2.2,错误解法 2.3,我们实现多组输入的思路 2.4,第一种正确的解法 2.5,第二种正确的解法 2.6&…

Exchange 服务器监控工具

Microsoft Exchange Server 是个消息与协作系统,提供了通常所需要的全部邮件服务功能,可以被用来构架应用于企业、学校的邮件系统或免费邮件系统。包括从电子邮件、会议安排、团体日程管理、任务管理、文档管理、实时会议和工作流等丰富的协作应用&#…

基于PyQt5的图形化界面开发——打砖块

目录 0. 前言1. 砖块类定义2. 挡板类定义3. 碰撞检测4. 小球和游戏初始化5. 完整代码6. 运行效果演示7. Pyinstaller 编译exe程序PyQt5 0. 前言 本文使用 PyQt5实现一个打砖块小游戏 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3 Pyt…

自学成为一名顶级黑客(网络安全)

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员(以编程为基础的学习)再开始学习 行为:从编程开始掌握,前端后端、通信协议、什么都学。 缺点:花费时间太长、实际向安全过渡后可用到的关键知识并不多。…

加密与解密 解密篇 逆向分析技术 (一) 栈/调用约定

目录 逆向是什么 32位软件逆向技术 1.启动函数 2.函数 函数的识别 函数的参数 利用栈进行传递 下面是通过esp来寻址 通过寄存器来传递参数 例子 例子 函数的返回值 例子 例子 逆向是什么 将可执行程序反汇编 通过分析反汇编代码来理解其代码功能(各个…

慢速减压控制技术在预防同步辐射光源和原位透射电镜氮化硅窗口膜真空中破裂的应用

摘要:氮化硅薄膜窗口广泛应用于同步辐射光源中的扫描透射软X射线显微镜和原位透射电镜,但氮化硅薄膜只有几百纳米的厚度,很容易因真空抽取初期的快速压差变化造成破裂。为此,本文提出了线性缓变压力控制解决方案,即控制…

【小数据处理】从日志中获取json数据的处理

写在头上 本次分析的数据来源是SpringBoot服务输出的logback日志。具体配置参考: 处理工具:Notepad v7.6。处理的日志内容不易过大,Notepad能打开电脑不卡最好(100M以内吧)。如果实在过大,先从日志源头进行截取&…

【javaEE面试题(五)在JMM(Java Memory Model (Java 内存模型))下谈volatile的作用】【保证内存可见 和 指令有序】

volatile的作用 JMM下volatile作用 volatile 能保证内存可见性 volatile 修饰的变量, 能够保证 “内存可见性”. 代码在写入 volatile 修饰的变量的时候 改变线程工作内存中volatile变量副本的值将改变后的副本的值从工作内存刷新到主内存 代码在读取 volatile 修饰的变量的时…

微信小程序上线与发布图文步骤操作

1.上传代码 打开微信小程序,在微信开发者工具的工具栏中单击“上传”按钮,页面中弹出提示框,根据提示填写相应的信息,然后单击“上传”按钮,即可上传代码。 2.查看上传代码之后的版本 登录微信小程序管理后台&…

【docker】部署svn服务器,docker安装部署svn服务器

话不多说直接上步骤! 1.下载镜像,创建容器 # 下载镜像 docker pull elleflorio/svn-server # 创建svn仓库目录,进入svn仓库目录 mkdir -p /var/svn # 创建svn服务容器,把容器中的svn仓库映射到本机,并映射3690端口 d…

基于深度学习的高精度安全帽及背心检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度安全帽及背心检测识别系统可用于日常生活中或野外来检测与定位安全帽及背心目标,利用深度学习算法可实现图片、视频、摄像头等方式的安全帽及背心目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系…

动手学深度学习——线性回归(原理解释+代码详解)

目录 1、线性回归2、线性回归模型2.1 线性模型2.2 损失函数2.2.1 平方差损失函数2.2.2 整个数据集上的损失函数 2.3 随机梯度下降2.4 用模型进行预测 3、线性回归的简单实现3.1 生成数据集3.2 读取数据集3.3 初始化模型参数3.4 定义模型3.5 定义损失函数3.6 定义优化算法3.7 训…

H3C-Cloud Lab实验-OSPF配置实验

一、实验拓扑图 实验需求: 1、按照图示配置 IP 地址 2、按照图示分区域配置 OSPF ,实现全网互通 3、为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域 4、掌握OSPF初始化流程、路由表学习的过…

基于linux下的高并发服务器开发(第一章)- GDB调试(2)1.14

(1)执行 gcc test.c -o test -g ,生成test文件 (2)gdb test (3)list 查看当前文件代码 list/l (从默认位置显示) (4)l 20 list/l 行号 &#xf…

kafka(一)

一:kafka架构介绍 1. Brokers kafka集群包括一个或者多个服务器,服务器的节点叫做broker。 2. Topic 类似于数据库中的table。物理上不通的topic会分开存储。一个topic的消息会存储在多个broker上。但是在读取的时候,只要选择好topic&…

Centos Stream9安装Neovim的详细过程

Centos Stream9下的Neovim的安装步骤: 安装neovim Index of /pub/epelhttps://dl.fedoraproject.org/pub/epel/ yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm yum install -y neovim python3-neovim yum install -y …

【MySQL】不允许你不会全文本搜索

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正&#xff0…

【ShenYu系列】ShenYu网关条件匹配的设计及原理分析

ShenYu网关中用到了很多有趣的设计,我对其中的条件匹配的实现尤其感兴趣,所以研究一下具体实现的原理。我这边用到的shenyu版本是2.6.0-SNAPSHOT。 应用入口 原理拆解 AbstractShenyuPlugin#execute,获取到SelectorData集合,进行…

Inkscape扩展脚本入门

Inkscape官网 https://inkscape.org/ 建议下载1.3版本 官方插件脚本文档 https://inkscape-extensions-guide.readthedocs.io/en/latest/index.html 但这个文档似乎和当前版本不符合,直接按照其内的方法写脚本会有问题 Inkscape插件加载目录 默认情况下&…

LVGL开发:配置模拟器学习LVGL V8.3

文章目录 模拟器配置常用控件学习基本知识WidgetEvents 输入设备ImagesScreen 参考 模拟器配置 LVGL支持多种IDE下配置模拟器: 在WINDOWS下面,大家最常使用的是VS2019,为了和大家保持一致,这里也使用VS2019进行配置。 首先&…