代码随想录算法训练营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.mzph.cn/bicheng/54771.shtml

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

相关文章

[网络] 网络层--IP协议

目录 一、IP协议 1.1 基本概念 1.2 IP协议报头 1.3 如何将报头和有效载荷分离和分用 1.4 分片与组装 1.5 如何减少分片&#xff1f; 1.6 分片和封装的具体过程 二、网段划分 2.1 再次理解IP地址 2.2 了解DHCP 2.3 网络划分方案 2.4 为什么要进行网络划分 2.5 特殊的…

接口加解密及数据加解密

目录 一、 加解密方式介绍 1.1 Hash算法加密 1.2. 对称加密 1.3 非对称加密 二、 我们要讲什么&#xff1f; 三、 接口加解密 四、 数据加解密 一、 加解密方式介绍 所有的加密方式我们可以分为三类&#xff1a;对称加密、非对称加密、Hash算法加密。 算法内部的具体实现…

选择租用徐州服务器机柜的作用有哪些?

企业为了线上网络业务&#xff0c;通常都会选择租用服务器来确保网络的稳定性&#xff0c;企业选择服务器租用和托管业务后&#xff0c;同时也需要租用服务器机柜来进行放置所使用的服务器&#xff0c;对于机柜企业可以选择租用徐州机柜&#xff0c;下面就来聊一下选择租用徐州…

LeetCode: 2207. 字符串中最多数目的子序列 一次遍历数组,时间复杂度O(n)

2207. 字符串中最多数目的子序列 today 2207 字符串中最多数目的子序列 题目描述 你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern &#xff0c;两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符&#xff0c;这个插…

【html】基础(二)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;js专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &am…

http增删改查四种请求方式操纵数据库

注意&#xff1a;在manage.py项目入口文件中的路由配置里&#xff0c;返回响应的 return语句后面的代码不会执行&#xff0c;所以路由配置中每个模块代码要想都执行&#xff0c;不能出现return 激活虚拟环境&#xff1a;venv(我的虚拟环境名称&#xff09;\Scripts\activate …

ubuntu20.04编译安装opencv-4.9.0的cuda版本

NVIDIA显卡驱动550.107.02&#xff08;4060显卡&#xff1a;8.9&#xff0c;3060显卡&#xff1a;8.6&#xff09;cuda&#xff1a;12.1cudnn&#xff1a;8.9.7opencv4.9.0&#xff0c;opencv_contrib_4.9.0 前三个安装略过&#xff01; 主要编译安装opencv4.9.0: 下载openc…

Unity3D 小案例 像素贪吃蛇 03 蛇的碰撞

Unity3D 小案例 像素贪吃蛇 第三期 蛇的碰撞&#xff08;完结&#xff09; 像素贪吃蛇 碰撞蛇身 当蛇头碰撞到蛇身时&#xff0c;游戏应该判定为失败。 找到蛇身预制体&#xff0c;添加 Body 标签和碰撞体&#xff0c;碰撞体的大小为 0.5&#xff0c;跟蛇头和蛇身的碰撞体范…

使用数据泵(Data Pump)迁移Oracle数据库数据

目的 将一个oracle数据库实例数据复制给另一个实例 注意事项 sqlplus&#xff08;即在本机linux环境下执行sql&#xff09;、expdp、impdp等命令一般需要切换到oracle用户才能执行 如果你当前是linux的root用户&#xff0c;请切换用户 su - oracle //一般在oracle账号下才能…

node节点使用:

节点&#xff1a; 1.返回父节点 parentNode let par li1.parentNodepar.style.border 1px solid red 2.获取所有子节点的集合 childNodes let nodes par.childNodes 3.第一个子节点 firstChild let frist par.firstChild 4.最后一个 lastChild let last par.lastC…

AlDente Pro for Mac电池健康保护工具

AlDente Pro for Mac 是一款适用于 Mac 的实用电池健康保护工具。以下是它的主要特点和优势&#xff1a; 软件下载地址 一、保护电池寿命的原理 锂离子和聚合物电池&#xff08;如 Mac 笔记本中的电池&#xff09;在 30% 到 80% 之间运行时使用寿命最长。始终将电池电量保持…

service 命令:管理系统服务

一、命令简介 ​service​ 命令是 Linux 系统中用于管理服务的工具&#xff0c;它通过调用位于 /etc/init.d/ ​目录下的服务脚本&#xff0c;来启动、停止、重启、查询状态等操作系统服务&#xff08;守护进程&#xff09;。service ​命令是一个便捷的 shell 脚本&#xff0…

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10-arm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;s…

【VUE3.0】动手做一套像素风的前端UI组件库---Message

目录 引言自己整一个UI设计稿代码编写1. 设计信息窗口基础样式2. 设置打开和关闭的方法3. 编写实例化组件的js文件4. 看下最终效果5. 组件完整代码6. 组件调用方式 总结 引言 本教程基于前端UI样式库 NES.css 的UI设计&#xff0c;自行研究复现。欢迎大家交流优化实现方法~ 此次…

深度学习(3):Tensor和Optimizer

文章目录 是什么Tensor1. Tensor 的基本概念2. 自动求导&#xff08;Autograd&#xff09;机制3. requires_grad 属性4. .data 和 .item()5. 梯度清零 Optimizer 是什么 Tensor&#xff08;张量&#xff09;&#xff1a;在 PyTorch 中&#xff0c;Tensor 是一种多维数组&#…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…

基于数据挖掘的航空客户满意度分析预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 航空公司致力于提供多样化的服务以满足乘客需求&#xff0c;包括但不限于提供免费无线网络、免费食物饮品、提供网上预约服务、飞机出口位置、座椅舒适度、卫生状况等&#xff0c;并希望以此提升乘…

SQL面试常见题目

SQL面试常见题目涉及多个方面&#xff0c;包括数据查询、数据操作、表的设计与优化等。以下列举一些经典的SQL面试题目&#xff0c;并附上解析答案&#xff1a; 1. 查询一张表中重复的数据 题目&#xff1a; 给定一个表 employees&#xff0c;包含 id, name, salary 列。如何…

python基础题练习

1.可否定义一个sum函数呢&#xff1f;返回指定区间的值的和&#xff1f;例如&#xff0c;区间[1,4]的和为123410返回指定区间值的平方的和呢&#xff1f;立方呢&#xff1f; 代码&#xff1a; # 计算从start到end&#xff08;包括end&#xff09;的所有整数的和。 def sum_ra…

AutoX.js向后端传输二进制数据

android的JavaScript自动化软件用过Hamibot和AutoX.js 不过在向后端传输二进制数据时都有些限制&#xff0c;不如浏览器前端那么自由。Hamibot的http按文档应该时能支持传字节数组&#xff0c;但是实际上应该还没有支持。AutoX.js的http也是这样&#xff0c;但是AutoX.js还支持…