代码随想录算法训练营day20 | 110.平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和

110.平衡二叉树

平衡二叉树需要看左右节点的深度是不是相差<=1

未看题解前

class Solution:def isBalanced(self, root: Optional[TreeNode]) -> bool:if not root:return Trueif abs(self.depth(root.left) - self.depth(root.right)) > 1:return Falsereturn self.isBalanced(root.left) and self.isBalanced(root.right)def depth(self, node):if not node:return 0return 1 + max(self.depth(node.left), self.depth(node.right))

用-1标记已经不满足平衡二叉树,最后结果不为-1说明为平衡二叉树。

class Solution:def isBalanced(self, root: Optional[TreeNode]) -> bool:# 求高度,后序遍历 左右中return self.getHeight(root) != -1def getHeight(self, node):if not node:return 0left_height = self.getHeight(node.left)if left_height == -1:return -1right_height = self.getHeight(node.right)if right_height == -1:return -1if abs(left_height - right_height) > 1:return -1return 1 + max(left_height, right_height)

257. 二叉树的所有路径

class Solution:def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:result = []if not root:return resultself.getPath(root, [root.val], result)return resultdef getPath(self, node, path, result):if not node.left and not node.right:result.append("->".join([str(i) for i in path]))if node.left:path.append(node.left.val)self.getPath(node.left, path, result)path.pop()if node.right:path.append(node.right.val)self.getPath(node.right, path, result)path.pop()

下面的代码更简洁一点

class Solution:def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:result = []if not root:return resultself.getPath(root, [], result)return resultdef getPath(self, node, path, result):path.append(node.val)if not node.left and not node.right:result.append("->".join([str(i) for i in path]))returnif node.left:self.getPath(node.left, path, result)path.pop()if node.right:self.getPath(node.right, path, result)path.pop()

404.左叶子之和

左叶子为左节点且为叶子节点

class Solution:def __init__(self):self.result = 0def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:if not root:return 0if root.left:if not root.left.left and not root.left.right:self.result += root.left.valelse:self.sumOfLeftLeaves(root.left)if root.right:self.sumOfLeftLeaves(root.right)return self.result

看了题解之后,代码更加简洁易懂

class Solution:def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:if not root:return 0left_leaves = self.sumOfLeftLeaves(root.left)if root.left and not root.left.left and not root.left.right:left_leaves = root.left.valright_leaves = self.sumOfLeftLeaves(root.right)return left_leaves + right_leaves

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

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

相关文章

哪里有视频素材可以用?全视频素材都在哪里找?

在这个数字化快速发展的世界中&#xff0c;高清和4K视频素材对于提升视觉故事的品质至关重要。以下是一系列全球知名的视频素材网站&#xff0c;它们提供的高质量素材能够满足您从商业广告到个人项目的所有需求。 1. 蛙学府 以其庞大的创意资源库著称&#xff0c;订阅者可以无…

【数据流图】用JointJs实现数据流图(一)

一、效果图 二、为什么选用JointJs&#xff1f; 节点是动态绘制的JointJs绘制流向线条时不会遮挡住下方的节点元素&#xff0c;方便绑定事件做拓展JointJs提供丰富的API&#xff0c;虽然比较底层但是拓展灵活连线不仅可以通过坐标点连接&#xff0c;还可直接根据节点连接 三、…

如何使用Vite快速构建vue项目

1、在自己定义的目录下打开cmd命令窗口&#xff1a;如文件夹目录上面输入cmd回车就可以打开 2、检查 node环境&#xff1a;通过node --version看版本号表示安装好了 3、 使用Vite 快速构建Vue项目 npm init vitelatest qiuqiu.admin 注意&#xff1a;如何你电脑没有装vite首…

PCIE协议-2-事务层规范---事务描述符

2.2.6.1 概览 事务描述符是请求者和完成器之间传输事务信息的机制。事务描述符由三个字段组成&#xff1a; 事务ID&#xff1a;标识未完成的事务属性字段&#xff1a;定义事务的特征流量类别&#xff08;TC&#xff09;字段&#xff1a;将事务与所需的服务类型关联起来 图2-…

EasyHPC - PyTorch入门教程【笔记】

内容来源&#xff1a;超算习堂 (easyhpc.net) 文章目录 01 Tensors环境要求1.1 Tensors1.1.1 直接创建tensor1.1.2 在现有tensor中创建tensor1.1.3 从NumPy中创建tensor 1.2 基本运算1.2.1 使用运算符1.2.2 调用方法 1.3 CUDA Tensors 02 Autograd2.1 Tensor2.2 Gradient 03 Ne…

实现流程化办公,可了解一下可视化报表开源

当前&#xff0c;实现流程化办公早已成为众多中小企业的发展目标和趋势。可以借助什么样的软件平台实现这一目标&#xff1f;低代码技术平台拥有可视化操作界面、够灵活、易维护等优势特点&#xff0c;在助力企业实现流程化办公、数字化转型方面具有重要的应用价值和推动作用。…

[华为OD] C卷 田忌赛马 DFS 200

题目&#xff1a; 给定两个只包含数字的数组a, b,调整数组a里面数字的顺序&#xff0c;使得尽可能多的a[i] >b[i]。 数组a和b中的数字各不相同。 输出所有可以达到最优结果的a数组的数量 输入描述 输入的第一行是数组a中的数字&#xff0c;其中只包含数字&#xff0c;每…

【0002day】HistCite的使用

HistCite是一个很好的软件&#xff0c;可以找出一个领域中具有代表性的几篇文章。同时使用也比较方便&#xff0c;因而我学习了一下它&#xff0c;并做一下记录。 分析过程 首先&#xff0c;需要选择核心数据库&#xff0c;然后依据关键字进行检索。 检索出来后&#xff0c;将…

Secure Transformer Inference Made Non-interactive

目录 1.概述2.Attention2.1 Matrix multiplication (ciphertext-plaintext).2.2 Matrix multiplication (ciphertext-ciphertext)2.3 Placement of bootstrapping3.SIMD密文压缩和解压缩4.SIMD槽折叠5.实验结果 1.概述 我们提出了NEXUS&#xff0c;这是第一个用于安全变压器推…

为什么要使用jvm,而不是直接启动类文件

JVM&#xff08;Java虚拟机&#xff09;是Java程序的运行环境&#xff0c;它负责将Java源代码编译成字节码&#xff0c;并在运行时负责解释和执行这些字节码。当你直接启动一个Java类时&#xff0c;实际上是启动了JVM&#xff0c;并指定了要执行的类。 以下是为什么要通过启动…

【QT教程】QT6与硬件接口编程 QT硬件编程

QT6与硬件接口编程 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免…

变老相机app

变老相机app 在手机上使用“变老相机”app&#xff0c;其中的时光穿梭功能可以生成10岁、20岁、50岁、70岁的照片 目的 得到未来自己的照片&#xff0c;能够更有效地督促我们为老年的自己存款。

为什么反射慢?

反射机制就是通过字节码文件对象获取成员变量、成员方法和构造方法&#xff0c;然后进一步获取它们的具体信息&#xff0c;如名字、修饰符、类型等。 反射机制的性能较低有很多原因&#xff0c;这里详细总结以下4点原因&#xff1a; &#xff08;1&#xff09;JIT优化受限&am…

记录minio的bug(Object name contains unsupported characters.)

场景是我将后端服务从121.xxx.xxx.xxx服务器上转移到了另一台服务器10.xxx.xxx.xxx 但图片都还在121.xxx.xxx.xxx服务器上&#xff0c;同样我10.xxx.xxx.xxx也安装了minio并且我的后端服务配置的minio地址也是10.xxx.xxx.xxx 此时有一个业务通过minio客户端获取图片&#xf…

矩阵和空间变换理解

矩阵和空间变换 把向量和矩阵相乘看作是空间变换&#xff0c;是其中一种看法 代数角度&#xff1a;向量的一行和矩阵的一列逐项相乘再相加等于新向量的一项 w代表原来坐标轴和新坐标轴之间的变换关系&#xff0c;而a和b体现的是原来向量的关系 矩阵代表的是旧坐标和新坐标之间…

辽宁在线教育系统下载,培训机构3月营销招生方案有哪些?

转眼已到3月&#xff0c;什么时候能够实现复工复课依旧无法确定&#xff0c;预计疫情想要得到全面的控制大概会持续到4、5月份。春招已经过去了&#xff0c;机构需要对暑招和秋招做出工作部署。对于我们培训机构来讲&#xff0c;必须要提前做出规划。 3月初&#xff0c;正值疫情…

Wireshark明文抓取

目录 原理 配置 1、配置环境变量 2、Wireshark配置 原理 SSLKEYLOGFILE是一个用于记录SSL/TLS会话中使用的密钥的文件。它主要用于调试和分析SSL/TLS协议。当启用了SSLKEYLOGFILE配置&#xff0c;系统会将所有SSL/TLS会话中使用的密钥记录到指定的文件中。这些密钥可以用来…

减少重排策略

重排指的是浏览器根据DOM结构和CSS样式计算元素的几何属性并并重新布局的过程&#xff1b;当修改DOM结构、修改了元素的尺寸或位置、改变元素的显示与隐藏状态、修改CSS样式&#xff0c;都会触发浏览器重排&#xff1b; 可以通过performance.getEntriesByType(layout)方法获取…

day04—java基础之方法详解

方法概述 方法是具有特定功能的代码集合&#xff0c;由于我们是把重复的代码写到方法当中&#xff0c;以后要用直接调用方法即可&#xff0c;不需要再写一遍了。代码相当于只写了一遍。所以可以提高代码的复用性。如果要修改代码&#xff0c;我们也只要修改一处即可&#xff0…

MySQL8.3升级踩坑记录

之前用的mysql5.7&#xff0c;目前被省公司发现有漏洞&#xff0c;需要升级mysql8.3&#xff0c;无奈只好升级&#xff0c;记录下踩坑经过 1、安装完以后设置环境变量&#xff0c;网上操作一大堆&#xff0c;以便于方便使用client 2、双击client 登录&#xff0c;开启远程访问…