代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

目录

226.翻转二叉树

101. 对称二叉树

104.二叉树的最大深度

111.二叉树的最小深度

226.翻转二叉树

题目

226. 翻转二叉树 - 力扣(LeetCode)

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

在这里插入图片描述

示例2:

输入:root = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100]
  • -100 <= Node.val <= 100

思路

视频讲解:LeetCode:226.翻转二叉树

代码随想录:226.翻转二叉树

想要翻转一颗二叉树,只需要把每一个节点的左右孩子都翻转一下,即可获得整体翻转的效果。

使用递归法时可以选择使用前序遍历或者后序遍历,前序遍历过程如下:

翻转二叉树

此外,还可以使用层序遍历。

题解

递归法:

class Solution {public TreeNode invertTree(TreeNode root) {return invert(root);}TreeNode invert(TreeNode root) {if (root == null)return root;if (root.left != null)invert(root.left);if (root.right != null)invert(root.right);TreeNode tmp = root.left;root.left = root.right;root.right = tmp;return root;}
}

层序遍历:

class Solution {public TreeNode invertTree(TreeNode root) {Deque<TreeNode> deque = new ArrayDeque<>();if (root == null)return root;deque.offer(root);while (!deque.isEmpty()) {int size = deque.size();for (int i = 0; i < size; i++) {TreeNode node = deque.poll();TreeNode tmp = node.left;node.left = node.right;node.right = tmp;if (node.left != null)deque.offer(node.left);if (node.right != null)deque.offer(node.right);}}return root;}
}

101. 对称二叉树

题目

101. 对称二叉树 - 力扣(LeetCode)

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例1:

输入:root = [1,2,2,3,4,4,3]
输出:true

img

示例2:

输入:root = [1,2,2,null,3,null,3]
输出:false

img

提示:

  • 树中节点数目在范围 [1, 1000]
  • -100 <= Node.val <= 100

思路

代码随想录:101.对称二叉树

视频讲解:LeetCode:101. 对称二叉树

如果一棵二叉树是对称的,其根节点的左子树和右子树是镜像对称的,所以本题需要比较根节点的左右子树是否对称。

递归法:

  1. 先确定递归方法的参数为左子树和右子树中相对应的节点,返回值为布尔类型。
  2. 确定中止情况:左右两个节点都为空时,对称;左右两个节点其中一个为空时,不对称;左右两个节点值不同时,不对称。
  3. 比较两次,一次比较外侧的两个节点,一次比较内侧的两个节点。

迭代法:每次迭代时将左右两侧对应的节点一起放入队列中,每次取两个队列中的元素出来进行比较。

题解

递归法:

class Solution {public boolean isSymmetric(TreeNode root) {return compare(root.left, root.right);}boolean compare(TreeNode left, TreeNode right) {if (left == null && right == null)return true;if ((left == null && right != null) || (left != null && right == null))return false;if (left.val != right.val)return false;boolean out = compare(left.left, right.right);boolean in = compare(left.right, right.left);return out == true && in == true;}
}

迭代法:

class Solution {public boolean isSymmetric(TreeNode root) {Deque<TreeNode> deque = new LinkedList<>();deque.offer(root.left);deque.offer(root.right);while (!deque.isEmpty()) {TreeNode left = deque.poll();TreeNode right = deque.poll();if (left == null && right == null)continue;if (right == null || left == null || left.val != right.val)return false;deque.offer(left.left);deque.offer(right.right);deque.offer(left.right);deque.offer(right.left);}return true;}
}

104.二叉树的最大深度

题目

104. 二叉树的最大深度 - 力扣(LeetCode)

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例1:

输入:root = [3,9,20,null,null,15,7]
输出:3

在这里插入图片描述

思路

视频讲解:LeetCode:104.二叉树的最大深度

代码随想录:104.二叉树的最大深度

此题除了层序遍历之外,还可以使用递归法。

树的深度等于左子树深度和右子树深度中的最大值+1。

  • 递归终止条件:当前节点为空。

  • 找出返回值:节点为空时说明子树高度为 0,返回 0,节点不为空时则分别求左右子树的高度,取两者中的最大值加 1 表示当前节点的高度,返回该数值。

题解

层序遍历:

class Solution {public int maxDepth(TreeNode root) {int res = 0;Deque<TreeNode> deque = new ArrayDeque<>();if (root == null)return res;deque.offer(root);while (!deque.isEmpty()) {int size = deque.size();for (int i = 0; i < size; i++) {TreeNode node = deque.poll();if (node.left != null)deque.offer(node.left);if (node.right != null)deque.offer(node.right);}res++;}return res;}
}

递归法:

class Solution {public int maxDepth(TreeNode root) {if (root == null) {return 0;} else {int left = maxDepth(root.left);int right = maxDepth(root.right);return Math.max(left, right) + 1;}}
}

111.二叉树的最小深度

题目

视频讲解:LeetCode:111.二叉树的最小深度

代码随想录:111.二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例1:

输入:root = [3,9,20,null,null,15,7]
输出:2

在这里插入图片描述

提示:

  • 树中节点数的范围在 [0, 105]
  • -1000 <= Node.val <= 1000

思路

代码随想录:111.二叉树的最小深度

除了层序遍历,还可以使用递归法,对于每一个非叶子节点,分别计算其左右子树的最小叶子节点深度。

题解

层序遍历:

class Solution {public int minDepth(TreeNode root) {int res = 0;Deque<TreeNode> deque = new ArrayDeque<>();if (root == null)return res;deque.offer(root);res++;while (!deque.isEmpty()) {int size = deque.size();for (int i = 0; i < size; i++) {TreeNode node = deque.poll();if (node.left == null && node.right == null)return res;if (node.left != null)deque.offer(node.left);if (node.right != null)deque.offer(node.right);}res++;}return res;}
}

递归法:

class Solution {public int minDepth(TreeNode root) {if (root == null)return 0;if (root.left == null && root.right == null)return 1;int min = Integer.MAX_VALUE;if (root.left != null)min = Math.min(minDepth(root.left), min);if (root.right != null)min = Math.min(minDepth(root.right), min);return min + 1;}
}

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

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

相关文章

Redis 篇-深入了解 Redis 五种数据类型和底层数据结构(SDS、Intset、Dict、ZipList、SkipList、QuickList)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Redis 底层数据结构 1.1 Redis 数据结构 - 动态字符串 SDS 1.2 Redis 数据结构 - Intset 1.3 Redis 数据结构 - Dict 1.3.1 Dict 的渐进式 rehash 1.4 Redis 数据…

双主轴精密纵切数控车床

双主轴精密纵切数控车床&#xff0c;作为一种先进的机械加工设备&#xff0c;融合了高精度、高效率与多功能性于一身&#xff0c;广泛应用于航空、航天、汽车、摩托车、通讯、制冷、光学、家电、微电子等多个行业。下面&#xff0c;我将从几个关键方面为您详细介绍这种机床的特…

DK5V100R10S 双引脚同步整流芯片12V 4A,10mΩ

DK5V100R10S是一款简单高效率的同步整流芯片&#xff0c;只有A&#xff0c;K两个引脚&#xff0c;分别对应肖特基二极管的PN管脚。芯片内部集成了100V功率NMOS管&#xff0c;可以大幅降低二极管导通损耗&#xff0c;提高整机效率&#xff0c;取代或替换目前市场上等规的肖特基整…

windows桌面管理软件推荐:一键整理桌面!美化电脑桌面小助手!

windows桌面管理软件推荐来咯&#xff01;在繁忙的工作和生活中&#xff0c;一个整洁、有序的电脑桌面不仅能提升工作效率&#xff0c;还能带来愉悦的视觉体验。然而&#xff0c;随着文件的增多&#xff0c;桌面往往变得杂乱无章。幸运的是&#xff0c;市面上有许多优秀的Windo…

用ArcMap实现可视域分析

在 ArcToolbox>>3D Analyst>>可见性>>视域&#xff0c;输入值如图所示&#xff1a; 设置完成后点击确认&#xff0c;生成可视域分析图层 Viewshe1&#xff0c;由内容列表 可见&#xff0c;红色为不可见&#xff0c;绿色为可见。 改变观察点的高度&#xff1a…

喜报 | 众数信科荣获2024年“火炬瞪羚企业”称号

近日&#xff0c;厦门火炬高新区公布2024年“火炬瞪羚企业”名单&#xff0c;众数&#xff08;厦门&#xff09;信息科技有限公司凭借在AI领域的综合实力、技术创新及典型场景应用等方面的卓越表现&#xff0c;成功入选。 瞪羚企业 一般指高成长性科技型企业&#xff0c;是跨过…

寄宿制学校自闭症教育:为每个孩子创造奇迹

寄宿制学校自闭症教育&#xff1a;星贝育园——为每个孩子创造奇迹 在自闭症儿童教育的广阔领域中&#xff0c;寄宿制学校以其独特的教育模式和全方位的关怀体系&#xff0c;正逐步成为推动这些特殊孩子成长与发展的重要力量。广州的星贝育园自闭症儿童寄宿制学校&#xff0c;…

PHPMailer低版本用法(实例)

使用旧版本的 PHPMailer&#xff1a; 如果你必须使用 PHP 5.2.7&#xff0c;可以考虑使用 PHPMailer 的旧版本&#xff0c;例如 PHPMailer 5.2.x 系列。这些较老的版本仍然可以在 PHP 5.2.7 上运行&#xff0c;但要注意这些旧版本可能不再提供安全更新。 PHPMailer 5.2.27 是旧…

云渲染怎么使用,3DMAX云渲染

​云渲染是一种利用云计算技术进行图形渲染的服务&#xff0c;简而言之就是“将帧拆分”&#xff0c;“分机渲染”&#xff0c;比如1500帧3DMAX动画&#xff0c;云渲染平台分几百上千台机器同时去渲染&#xff0c;原本要渲染1个月的项目&#xff0c;云渲染只需要1小时就能渲染完…

project generator 简单使用(二)之 CLion 与 AC6

文章目录 1 AC6 之于 CLion2 配置 progen3 可执行文件 size 显示优化4 测试 1 AC6 之于 CLion 1&#xff09;在上一篇文章中&#xff0c;我们知道 project generator 通过其 “Write Once, Compile any Tool” &#xff08;跨工具&#xff09;的特性&#xff0c;可以让我们使用…

Growthly Quest 增长工具:助力 Web3 项目实现数据驱动的增长

作者&#xff1a;Stella L (stellafootprint.network) 在瞬息万变的 Web3 领域&#xff0c;众多项目在用户吸引、参与和留存方面遭遇重重难关。Footprint Analytics 推出 Growthly&#xff0c;作为应对这些挑战的全方位解决方案&#xff0c;其中创新性的 Quest&#xff08;任务…

Python学习——【6.1】文件操作

【6.1】文件操作 一、文件的编码 问题&#xff1a;计算机只能识别0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中的呢&#xff1f; 答&#xff1a;使用编码技术&#xff08;密码本&#xff09;将内容翻译成0和1存入。 编码技术即翻译的…

第 16 章 神兵利器——optimizer trace 表的神器功效

optimizer trace 功能可以让我们方便地查看优化器生成执行计划的整个过程。 SHOW VARIABLES LIKE optimizer_trace;列名描述QUERY查询语句TRACE优化过程的JSON文本MISSING_BYTES_BEYOND_MAX_MEM_SIZE优化过程文本超过最大长度限制后被忽略的字节数INSUFFICIENT_PRIVILEGES有无…

windows自带的录屏功能好用吗?这4款录屏工具也是不错的选择。

因为现在很多人都会有录屏需求&#xff0c;所以平常使用的一些设备当中会有自带的录屏功能。比如windows10系统下只要按下键盘上的 “WinG” 键&#xff0c;就可打开录屏功能。但是录制的时长会有限制&#xff0c;并且录屏功能会有些限制。如果对录屏有更多的需求&#xff0c;可…

牛客周赛 Round 61 (C++实现)

比赛链接&#xff1a;牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) 文章目录 1.致十年后的我们1.1 题目描述1.2 思路1.3 代码 2.简单图形问题2.1 题目描述2.2 思路2.3 代码 3. 小红的机器人构造3.1 题目描述3.2 思路3.2.1 问题13.2.2 问题23…

组合优化与凸优化 学习笔记4 凸优化问题

优化问题基本定义 假如f(x)是方圆R以内&#xff08;R只要大于0就行&#xff09;最好的一个解 等价问题 就是这种优化函数没啥区别&#xff08;乘了个系数&#xff09;&#xff0c;约束们也就多了个系数的情况&#xff0c;这和原本的显然一样。这是等价的最简单的例子。 归根结…

微服务(一)

目录 一、概念 1、单体架构 2、微服务 3、springcloud 二、微服务的拆分 1、微服务的拆分原则 1.1 什么时候拆 1.2 怎么拆 2、服务调用 2.1 resttemplate 2.2 远程调用 一、概念 1、单体架构 单体架构&#xff08;monolithic structure&#xff09;&#xff1a;顾名…

JavaScript动态数据可视化

一、引言 在前端开发中&#xff0c;JavaScript无疑是最核心的技术之一。它能够处理各种交互逻辑&#xff0c;实现复杂的功能。本文将通过一个动态数据可视化的案例&#xff0c;展示如何使用JavaScript实现复杂功能。动态数据可视化能够将大量数据以直观、生动的方式呈现&#…

YOLOv10独家改进:红外场景严重遮挡和重叠目标解决方案 | 一种新的自适应算法轻量级通道分割和变换(ALSS)模块,自适应特征提取优化策略

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

5.03TB高清卫星影像更新(WGS84坐标投影)

最近对WGS84版的高清卫星影像数据进行了一次更新&#xff0c;并基于更新区域生成了相应的接图表。 5.03TB高清卫星影像更新 本次数据更新了6191个离线包&#xff0c;共5.03TB大小&#xff0c;并全部生成了更新范围的接图表。 更新范围接图表 更新范围的接图表由每一个离线包…