代码随想录【Day16】| 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
110. 平衡二叉树
题目链接
题目描述:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]

返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]

返回 false 。
难点:
- 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。
- 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。
思路:
要求比较高度,必然是要后序遍历。
时间复杂度:O()
空间复杂度:O()
class Solution {public boolean isBalanced(TreeNode root) {if (root == null) return true;return !(getHeight(root) == -1);}private int getHeight(TreeNode root) {if (root == null) return 0; //空结点高度为0int leftH = getHeight(root.left);if (leftH == -1) return -1;int rightH = getHeight(root.right);if (rightH == -1) return -1;return Math.abs(leftH-rightH) > 1 ? -1 : 1+Math.max(leftH, rightH);}
}
时长:
15min
收获:
区分深度与高度
递归方法练习
257. 二叉树的所有路径
题目链接
题目描述:
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:

难点:
思路:
时间复杂度:O()
空间复杂度:O()
class Solution {List<String> resList = new ArrayList<>();public List<String> binaryTreePaths(TreeNode root) {if (root == null) return resList;List<Integer> path = new ArrayList<>();traversal(root, path);return resList;}private void traversal(TreeNode root, List<Integer> path) {path.add(root.val);if (root.left == null && root.right == null) {StringBuilder sb = new StringBuilder();for (int i = 0; i < path.size()-1; i++) {sb.append(path.get(i)).append("->");}sb.append(path.get(path.size()-1));resList.add(sb.toString());return;}if (root.left != null) {traversal(root.left, path);path.remove(path.size()-1);}if (root.right != null) {traversal(root.right, path);path.remove(path.size()-1);}}
}
如果想隐藏回溯,要小心了
if (root.left != null) {traversal(root.left, path.append("->"));
}
if (root.right != null) {traversal(root.right, path.append("->"));
}
这么写大错特错!因为通过path.append方法,字符串元素是累计添加到path中,退出函数时,并不能达到回溯的目的!!!
正确的做法是new一个StringBuilder对象作为参数传入
class Solution {List<String> resList = new ArrayList<>();public List<String> binaryTreePaths(TreeNode root) {if (root == null) return resList;StringBuilder path = new StringBuilder();traversal(root, path);return resList;}private void traversal(TreeNode root, StringBuilder path) {path.append(root.val);if (root.left == null && root.right == null) {resList.add(path.toString());return;}if (root.left != null) {traversal(root.left, new StringBuilder(path).append("->"));}if (root.right != null) {traversal(root.right, new StringBuilder(path).append("->"));}}
}
当然,使用字符串拼接实现会更容易:
List<String> resList = new ArrayList<>();public List<String> binaryTreePaths(TreeNode root) {if (root == null) return resList;String path = "";traversal(root, path);return resList;}private void traversal(TreeNode root, String path) {path += root.val;if (root.left == null && root.right == null) {resList.add(path);return;}if (root.left != null) {traversal(root.left, path+"->");}if (root.right != null) {traversal(root.right, path+"->");}}
迭代法:
class Solution {public List<String> binaryTreePaths(TreeNode root) {List<String> result = new ArrayList<>();if (root == null)return result;Stack<Object> stack = new Stack<>();// 节点和路径同时入栈stack.push(root);stack.push(root.val + "");while (!stack.isEmpty()) {// 节点和路径同时出栈String path = (String) stack.pop();TreeNode node = (TreeNode) stack.pop();// 若找到叶子节点if (node.left == null && node.right == null) {result.add(path);}//右子节点不为空if (node.right != null) {stack.push(node.right);stack.push(path + "->" + node.right.val);}//左子节点不为空if (node.left != null) {stack.push(node.left);stack.push(path + "->" + node.left.val);}}return result;}
}
时长:
13min
收获:
注意拼接字符串的细节
404. 左叶子之和
题目链接
题目描述:
计算给定二叉树的所有左叶子之和。
示例:

难点:
思路:
找左叶子之和
核心判断:当前节点是否有左孩子?左孩子是否为叶子?
时间复杂度:O()
空间复杂度:O()
这样写是不对的!
变量值sum没有返回。。。什么原因?
public int sumOfLeftLeaves(TreeNode root) {int sum = 0;traversal(root, sum);return sum;
}
private void traversal(TreeNode root, int sum) {if (root == null) return;if (root.left != null && root.left.left == null && root.left.right == null) {sum += root.left.val;}traversal(root.left, sum);traversal(root.right, sum);
}
sum不能通过函数的形参传入!!!
int sum = 0;
public int sumOfLeftLeaves(TreeNode root) {traversal(root);return sum;
}
private void traversal(TreeNode root) {if (root == null) return;if (root.left != null && root.left.left == null && root.left.right == null) {sum += root.left.val;}traversal(root.left);traversal(root.right);
}
迭代法:
// 先序遍历
class Solution {public int sumOfLeftLeaves(TreeNode root) {if (root == null) return 0;Stack<TreeNode> stack = new Stack<> ();stack.add(root);int result = 0;while (!stack.isEmpty()) {TreeNode node = stack.pop();if (node.left != null && node.left.left == null && node.left.right == null) {result += node.left.val;}if (node.right != null) stack.add(node.right);if (node.left != null) stack.add(node.left);}return result;}
}// 层序遍历
class Solution {public int sumOfLeftLeaves(TreeNode root) {int sum = 0;if (root == null) return 0;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {int size = queue.size();while (size -- > 0) {TreeNode node = queue.poll();if (node.left != null) { // 左节点不为空queue.offer(node.left);if (node.left.left == null && node.left.right == null){ // 左叶子节点sum += node.left.val;}}if (node.right != null) queue.offer(node.right);}}return sum;}
}
时长:
10min
收获:
参数传递
相关文章:
代码随想录【Day16】| 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
110. 平衡二叉树 题目链接 题目描述: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,nul…...
套娃式工具!用 AI 识别 AI ?#AI classifier
2022年以来,市面上就出现了不少 AI 生成文本的工具,尤其是 OpenAI 推出的 ChatGPT ,不仅能够协助完成撰写邮件、视频脚本、文案、翻译、代码等任务,还能通过学习和理解人类的语言来进行对话,并根据聊天的上下文进行互动…...
CURL error 60: SSL certificate problem: certificate has expired
项目使用guzzleHttp做的一个接口,报错:certificate has expired 因为在linux centos环境与window环境有所不同,在此记录一下解决过程。 目录 报错提示 原因 解决方式 1.去掉guzzlehttp的验证 2.更新CA证书 总结 报错提示 cURL error 60…...
接口自动化:requests
引言:目前软件测试对测试人员的能力要求 业务测试能力:占比5-6成接口、自动化、性能测试能力:占比4-5成流程规范:1成(需要综合型的测试人才):业务能力、代码能力、开发思维(封装&…...
极简TypeScript教程--数据类型
TypeScript最大的特点就是有类型检测,格式为let/const 标识符: 数据类型 赋值;例子:let msg: string Hello World这样msg这个变量就有了字符串类型,如果再给他赋值为数字类型,就会在编译期报错。变量的类型推导在开发中,有时候为了方便起见…...
JAVA开发测试(jmeter如何测试性能与估算)
对C的业务网站或应用,进行性能测试来评估使用服务器情况是必不可少的一项工作。 一、测试工具: Apache JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能,是Apache组织开发的…...
【新解法】华为OD机试 - 求解连续数列 | 备考思路,刷题要点,答疑,od Base 提供
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 求解连续数列 | 备考思路,刷题要点,答疑,od Base 提供 题目 已知连续正整数数列{K}=K1,K2,K3… Ki的各个数相加之和为S, i = N (0 < S < 100000, 0 < N < 100000), 求此数列K。 输入 输…...
Python3 File(文件) 方法
Python3 File(文件) 方法 open() 方法 Python open() 方法用于打开一个文件,并返回文件对象。 在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 注意:使用 open() 方法一定要保证关闭文件对…...
APP渗透抓包
APP渗透抓包1.APP渗透测试原理2.安装安卓模拟器抓包2.1.安装模拟器2.2.设置代理下载证书2.2.1.burp suite设置代理2.2.2.浏览器设置代理2.2.3.下载证书2.3.模拟器安装证书2.3.1.移动证书2.3.2.证书设置2.4.设置代理2.4.1.设置burp suite代理2.4.2.夜神模拟器代理2.5.抓包测试2.…...
力扣(LeetCode)414. 第三大的数(2023.02.16)
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1: 输入:[3, 2, 1] 输出:1 解释:第三大的数是 1 。 示例 2: 输入:[1, 2] 输出:2…...
Spring底层
一、什么是Spring?谈谈你对IOC和AOP的理解。Spring: 是一个企业级java应用框架,他的作用主要是 简化软件的开发以及配置过程,简化项目部署环境。Spring的有点:1、Spring低侵入设计,对业务代码的污染非常低。…...
Cache-Control 常见字段
Cache-Control 常见字段 参考:https://blog.csdn.net/qq_41996454/article/details/108644436 Cache-Control 可以在请求头或者响应头中设置,并且可以组合使用多种指令 no-cache 和 no-store 用作控制缓存,被服务器通过响应头 Cache-Contro…...
Flink Checkpoint 中的通用增量Checkpoint
文章目录知识点状态Flink容错恢复周期性的 Checkpoint错误检测 Failure Detected重新调度 Re-scheduling状态恢复 State Recovery通用增量Checkpoint知识点 状态 算子需要记录之前数据处理的中间结果,把中间结果暂时缓存在算子的内部,这就是算子的状态…...
金三银四必看的软件测试面试题宝典,背完offer随便拿
怎么来设计测试方案根据测试需求(包括功能需求和非功能性需求),识别测试要点,识别测试环境要求,安排测试轮次,根据项目计划和开发计划做整体的测试安排。 被测试的特性:通过对需求规格说明书进行…...
企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…...
扬帆优配“数字经济+实体经济”融合发展,行业增长空间大!
组织以为,数字经济已经逐步成为工业商场和资本商场的共同主题。 2月16日,国家发改委在《求是》杂志发表文章《努力推进经济完成质的有效提升和量的合理增加》。文章指出要加速开展数字经济,加速实施“东数西算”等重大工程,推进数…...
分享82个HTML电脑主机模板,总有一款适合您
分享82个HTML电脑主机模板,总有一款适合您 82个HTML电脑主机模板下载链接:https://pan.baidu.com/s/13DGOCgvbxSksMPwJzi2z0g?pwdl0mi 提取码:l0mi Python采集代码下载链接:采集代码.zip - 蓝奏云 云虚拟主机运营商网站模板…...
.htaccess语法教程
RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ RewriteCond %{REQUEST_URI} !^/blog/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /blog/$1# 没有输入文件名的默认到到首页 RewriteCond %{HTTP_HOST} ^(w…...
C++ ——多态 下 (图解多态原理、虚函数的再认知)
目录 一、抽象类 1)抽象类定义 2)抽象类的继承 3)抽象类实现多态 4)抽象类的好处 二、多态的实现原理 1)虚函数的存储方式 2)子类中虚函数的存储方式 ① 子类将基类中的虚表原封不动的拷贝到自己的…...
cocos creater 3.x 构建QQ小游戏
一、目前 cocos creater 不支持直接构建QQ小游戏,需要构建成微信小游戏,然后修改成QQ小游戏 二、构建QQ小游戏不能勾选 分离引擎 的选项,勾选分离引擎的选项,需要安装cocos微信小游戏引擎插件,这个插件似乎目前只支持微…...
Llama-3.2V-11B-cot部署教程:双卡4090一键启动视觉推理工具
Llama-3.2V-11B-cot部署教程:双卡4090一键启动视觉推理工具 1. 项目概述 Llama-3.2V-11B-cot是基于Meta多模态大模型开发的高性能视觉推理工具,专为双卡4090环境优化。它解决了传统大模型部署复杂、视觉权重加载失败等痛点,让普通用户也能轻…...
YOLOv12惊艳效果展示:注意力机制让目标检测更精准
YOLOv12惊艳效果展示:注意力机制让目标检测更精准 1. 突破性效果预览 YOLOv12的出现彻底改变了我们对实时目标检测的认知。这款基于注意力机制的全新架构,在保持YOLO系列标志性速度的同时,将检测精度推向了前所未有的高度。让我们先看几个令…...
医学影像处理实战:用Python实现Marching Cubes算法重建CT扫描数据
医学影像处理实战:用Python实现Marching Cubes算法重建CT扫描数据 在医学影像处理领域,三维重建技术正逐渐成为临床诊断和科研分析的重要工具。想象一下,当医生面对一堆二维CT切片时,如何快速构建出患者骨骼或器官的三维模型&…...
终极指南:Shenyu网关集成Polaris服务治理平台的完整教程
终极指南:Shenyu网关集成Polaris服务治理平台的完整教程 Shenyu网关作为基于Spring Cloud的高性能API网关,与Polaris服务治理平台的集成能够为企业级微服务架构提供强大的流量控制和动态配置能力。本教程将详细讲解如何从零开始配置Shenyu网关与Polaris…...
开源项目依赖管理:从冲突解决到高效协作的实践指南
开源项目依赖管理:从冲突解决到高效协作的实践指南 【免费下载链接】IPED IPED Digital Forensic Tool. It is an open source software that can be used to process and analyze digital evidence, often seized at crime scenes by law enforcement or in a corp…...
3步终极方案:Ruffle Flash模拟器性能优化完全指南
3步终极方案:Ruffle Flash模拟器性能优化完全指南 【免费下载链接】ruffle A Flash Player emulator written in Rust 项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle Ruffle是一个基于Rust语言开发的Flash Player模拟器,专为现代浏览…...
Z-Image Atelier 生成极限测试:挑战高分辨率与复杂构图下的稳定性
Z-Image Atelier 生成极限测试:挑战高分辨率与复杂构图下的稳定性 最近在玩各种AI绘画工具,发现一个挺有意思的现象:很多模型生成小图看着还行,一旦把分辨率往上提,或者画面内容变得复杂,就容易“翻车”。…...
基于RRT算法的机械臂避障路径规划仿真研究:三维空间球体障碍物下的Matlab实现
四种RRT算法三维机械臂避障 只做球体障碍物 matlab机械臂路径规划仿真 《基于改进RRT算法的六自由度六自由度机械臂避障路径规划研究》第四章,第五章中三维空间机械臂避障。 基本与文中效果对应。机械臂在三维空间玩躲猫猫有多难?RRT算法家族表示这题能解…...
R语言实战:单因素方差分析从数据导入到结果解读(附完整代码)
R语言实战:单因素方差分析从数据导入到结果解读(附完整代码) 当你第一次面对一组实验数据,试图比较不同处理组间的差异时,单因素方差分析(One-way ANOVA)往往是首选方法。作为R语言数据分析的基…...
SEO_2024年最有效的SEO策略与核心技巧分享
2024年最有效的SEO策略与核心技巧分享 在数字营销领域,搜索引擎优化(SEO)始终是网站流量提升的关键。2024年,随着搜索引擎算法的不断更新和用户行为的变化,SEO策略也在不断演变。本文将详细分享2024年最有效的SEO策略与…...
