代码随想录算法训练营第十三天| 102. 二叉树的层序遍历、226.翻转二叉树、101. 对称二叉树

102. 二叉树的层序遍历

在这里插入图片描述

题目链接:102. 二叉树的层序遍历
文档讲解:代码随想录
状态:dfs没写出来,bfs不知道如何分层

import java.util.*;public class BinaryTreeLevelOrderTraversal {// 用于存储每一层的节点值List<List<Integer>> res = new LinkedList<>();// 使用深度优先搜索 (DFS) 进行层序遍历public List<List<Integer>> levelOrder(TreeNode root) {if (root != null) {dfs(root, 0); // 从根节点开始,深度为0}return res;}// DFS辅助方法public void dfs(TreeNode root, int depth) {if (root == null) {return; // 如果当前节点为空,直接返回}if (res.size() == depth) {// 如果当前深度没有对应的列表,创建一个新的列表res.add(new ArrayList<>());}// 将当前节点的值添加到对应深度的列表中res.get(depth).add(root.val);// 递归处理左子节点,深度加1dfs(root.left, depth + 1);// 递归处理右子节点,深度加1dfs(root.right, depth + 1);}// 使用广度优先搜索 (BFS) 进行层序遍历public List<List<Integer>> bfs(TreeNode root) {Deque<TreeNode> queue = new LinkedList<>(); // 使用双端队列来存储节点if (root != null) {queue.addLast(root); // 将根节点加入队列}while (!queue.isEmpty()) {// 获取当前层的节点个数.// 重要!!!后面代码中利用size--处理掉每层的结点后,队列中剩下的结点就是下一层的结点int size = queue.size(); // 当前层的节点数ArrayList<Integer> list = new ArrayList<>(); // 用于存储当前层的节点值while (size > 0) {TreeNode node = queue.pollFirst(); // 取出当前层的节点list.add(node.val); // 将节点值加入当前层的列表if (node.left != null) {queue.addLast(node.left); // 将左子节点加入队列}if (node.right != null) {queue.addLast(node.right); // 将右子节点加入队列}size--;}res.add(list); // 将当前层的节点值列表加入结果列表}return res;}
}// 定义树节点类
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }
}

226.翻转二叉树

在这里插入图片描述

题目链接:226.翻转二叉树
文档讲解:代码随想录
状态:so easy

    // 使用递归方式进行二叉树翻转public TreeNode invertTree(TreeNode root) {if (root != null) {// 保存当前节点的左子节点TreeNode left = root.left;// 保存当前节点的右子节点TreeNode right = root.right;// 递归翻转右子树,并将其设为当前节点的左子节点root.left = invertTree(right);// 递归翻转左子树,并将其设为当前节点的右子节点root.right = invertTree(left);}// 返回翻转后的根节点return root;}// 使用广度优先搜索 (BFS) 进行二叉树翻转public TreeNode bfs(TreeNode root) {if (root != null) {// 创建一个双端队列来存储节点Deque<TreeNode> deque = new LinkedList<>();// 将根节点加入队列deque.addLast(root);// 当队列不为空时,继续处理while (!deque.isEmpty()) {int size = deque.size(); // 当前层的节点数// 遍历当前层的所有节点while (size-- > 0) {// 取出当前层的节点TreeNode node = deque.pollFirst();// 翻转当前节点的左右子节点TreeNode temp = node.left;node.left = node.right;node.right = temp;// 如果左子节点不为空,将其加入队列if (node.left != null) {deque.add(node.left);}// 如果右子节点不为空,将其加入队列if (node.right != null) {deque.add(node.right);}}}}// 返回翻转后的根节点return root;}

101. 对称二叉树

在这里插入图片描述

题目链接:101. 对称二叉树
文档讲解:代码随想录
状态:递归写出来了,迭代没写出来

    // 判断二叉树是否对称public boolean isSymmetric(TreeNode root) {if (root == null) {return true; // 如果根节点为空,则认为是对称的}TreeNode left = root.left;TreeNode right = root.right;// 比较根节点的左右子树是否对称return compare(left, right);}// 辅助方法:比较两个子树是否对称public boolean compare(TreeNode left, TreeNode right) {if (left == null && right == null) {return true; // 如果两个子树都为空,则对称} else if (left == null || right == null) {return false; // 如果其中一个子树为空,则不对称} else {// 比较左子树的左子树与右子树的右子树,左子树的右子树与右子树的左子树,以及当前节点的值是否相等return compare(left.left, right.right) && compare(left.right, right.left) && left.val == right.val;}}
    public boolean isSymmetric(TreeNode root) {if (root == null || (root.left == null && root.right == null)) {return true;}Deque<TreeNode> stack = new LinkedList<>();stack.addLast(root.left);stack.addLast(root.right);while (!stack.isEmpty()) {TreeNode right = stack.pollLast();TreeNode left = stack.pollLast();// 如果两个节点都为空,继续下一次循环if (left == null && right == null) {continue;}// 如果一个节点为空,另一个节点不为空,则不对称if (left == null || right == null) {return false;}// 如果两个节点的值不相等,则不对称if (left.val != right.val) {return false;}stack.addLast(left.left);stack.addLast(right.right);stack.addLast(left.right);stack.addLast(right.left);}return true;}

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

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

相关文章

Etcd Raft架构设计和源码剖析2:数据流

Etcd Raft架构设计和源码剖析2&#xff1a;数据流 | Go语言充电站 前言 之前看到一幅描述etcd raft的流程图&#xff0c;感觉非常直观&#xff0c;但和自己看源码的又有些不同&#xff0c;所以自己模仿着画了一下&#xff0c;再介绍一下。 下图从左到右依次分为4个部分&…

Windows 宿主机访问 VirtualBox 虚拟机中创建的 docker 容器中的 mysql8.0 的数据

一、场景需求 在开发环境中&#xff0c;一般使用 windows 系统进行开发&#xff0c;但需要在 linux 系统中创建运行 mysql8.0 的 docker 容器中进行测试&#xff08;win10特定版本或win11才能安装 docker&#xff09;&#xff0c;为了方便还需要在 windows 系统中通过 SQLyog …

植物大战僵尸杂交版2.0.88最新版+防闪退工具V2+修改工具+高清工具

植物大战僵尸杂交版&#xff0c;不仅继承原作的经典玩法&#xff0c;而且引入了全新的植物融合玩法&#xff0c;将各式各样的植物进行巧妙的杂交&#xff0c;孕育出前所未有、功能各异的全新植物。 创新的杂交合成系统 游戏引入了创新的杂交合成系统&#xff0c;让玩家可以将不…

Unity DOTS技术(五)Archetype,Chunk,NativeArray

文章目录 一.Chunk和Archetype什么是Chunk?什么是ArchType 二.Archetype创建1.创建实体2.创建并添加组件3.批量创建 三.多线程数组NativeArray 本次介绍的内容如下: 一.Chunk和Archetype 什么是Chunk? Chunk是一个空间,ECS系统会将相同类型的实体放在Chunk中.当一个Chunk…

DP读书:《ModelArts人工智能应用开发指南》(一)人工智能技术、应用平台

怎么用ModelArts人工智能应用 训练底座训练案例 盘古矿山模型Main config.py 训练底座 训练案例 盘古矿山模型 Main 下面是快速助手 https://support.huaweicloud.com/qs-modelarts/modelarts_06_0006.html 准备开发环境 在ModelArts控制台的“ 开发环境 > Notebook”页面…

【C#学习笔记】属性和字段

文章目录 前言属性和字段的区别字段访问修饰符和关键字定义变量类型的定义变量命名变量的赋值 属性 不同的使用情况 前言 最近在工作的过程中常常会觉得自己在程序设计方面的能力还是有欠缺。例如一直对于变量的声明感到不足&#xff0c;在工作中为了图方便总是直接public定义…

声音突破:so 索

小孩儿看完武侠剧&#xff0c;就决定从二楼往地面上跳&#xff0c;年轻的老妈看到了&#xff0c;就在那里骂&#xff0c;喝斥不准逞能&#xff0c;不许乱来&#xff0c;不许跳。但小孩子不听话&#xff0c;心里全是影视剧的画面&#xff0c;那叫一个侠之能也&#xff0c;于是飞…

面向长文本处理的键值缓存压缩技术:智能压缩,无损性能,免微调

随着输入长度的增加&#xff0c;大型语言模型&#xff08;LLMs&#xff09;中的键值&#xff08;KV&#xff09;缓存需要存储更多的上下文信息以维持性能&#xff0c;这导致内存消耗和计算时间急剧上升。KV缓存的增长对内存和时间效率的挑战主要表现在两个方面&#xff1a;一是…

元宇宙数字藏品交易所,未来发展的大趋势

随着科技的飞速进步&#xff0c;元宇宙以其独特的魅力为数字世界绘制了一幅前所未有的宏伟蓝图。在这一宏大的背景下&#xff0c;数字藏品交易所作为连接虚拟与现实的桥梁&#xff0c;正以其卓越的优势&#xff0c;引领着数字藏品市场迈向新的高度。 首先&#xff0c;元宇宙为…

【相关概念】经济金融中的Momentum

张张张三丰de思考与总结&#xff1a; 最近做的期货价格泡沫中&#xff0c;一直在说&#xff0c;momentum&#xff0c;momentum&#xff0c;momentum&#xff0c;那么究竟什么是momentum呢&#xff1f; 目前&#xff0c;在有关期货价格泡沫的研究文献中&#xff0c;一般都是研究…

本轮牛市新趋势,跟随The First捕捉牛市Alpha

与以往牛市“百花齐放”的繁荣景象相比&#xff0c;本轮牛市颇具独特走势&#xff0c;呈现出了资金集中度高、财富聚集效应小的特点&#xff0c;绝大部分加密资产甚至跑不赢BTC的涨幅幅度。而以往大放色彩的公链币价值币的走势&#xff0c;甚至比不过牛尾才爆发的MEME币。这使得…

Java项目之消息队列(手写java模拟实现mq)【三、MQ的核心类-消息类的存储(用文件存储消息)】✔ ★

Java项目之MQ 七. 消息存储设计设计思路为什么要用文件存储文件存储结构queue_data.txt ⽂件格式:queue_stat.txt ⽂件格式: 创建 MessageFileManager 类定义一个内部类, 来表示该队列的统计信息 Stat实现统计⽂件Stat读写&#xff08;文本文件的读写&#xff09;InputStream—…

python爬虫入门教程(一)

上一篇文章讲了爬虫的工作原理&#xff0c;这篇文章以后就要重点开始讲编程序了。 简单爬虫的的两个步骤&#xff1a; 使用HTTPRequest工具模拟HTTP请求&#xff0c;接收到返回的文本。用于请求的包有: requests、urllib等。 对接收的文本进行筛选,获取想要的内容。用户筛选文…

JavaScript-内存分配,关键字const

内存空间 内存分为栈和堆 栈&#xff1a;由操作系统自动释放存放的变量值和函数值等。简单数据类型存放在栈中 栈会由低到高先入后出 堆&#xff1a;存储引用类型 &#xff08;数组&#xff0c;对象&#xff09; 对象会先将数据存放在堆里面&#xff0c;堆的地址放在栈里面 关键…

VMD-PSO-LSTM单维时序预测模型(单输入单输出)-附代码

VMD-PSO-LSTM单维时序预测模型&#xff08;单输入单输出&#xff09; 1&#xff09;首先对原始单维数据进行VMD分解&#xff0c;分解为K个模态分量和1个残差分量 2&#xff09;将各个模态分量输入模型&#xff0c;建立模型进行预测 3&#xff09;将各个预测结果相加得到最终…

clickhouse(十五、存储优化实践)

文章目录 背景问题定位优化方式排序键设计写入顺序压缩算法 DoubleDeltaLowCardinality避免使用Nullable 总结 背景 clickhouse集群容量告警&#xff0c;项目中某些表占据大量的存储空间&#xff0c;借此机会对ck的存储优化进行实践学习&#xff0c;并通过多种方式测试验证优化…

React(五)useEffect、useRef、useImperativeHandle、useLayoutEffect

(一)useEffect useEffect – React 中文文档 useEffect hook用于模拟以前的class组件的生命周期&#xff0c;但比原本的生命周期有着更强大的功能 1.类组件的生命周期 在类组件编程时&#xff0c;网络请求&#xff0c;订阅等操作都是在生命周期中完成 import React, { Com…

【前端】响应式布局笔记——flex

二、Flex Flex(FlexiableBox:弹性盒子&#xff0c;用于弹性布局&#xff0c;配合rem处理尺寸的适配问题)。 1、flex-direction:子元素在父元素盒子中的排列方式。 父级元素添加&#xff1a;flex-direction: row; 父级元素添加&#xff1a;flex-direction: row-reverse; 父…

家政预约小程序13我的订单

目录 1 我的订单页面布局2 全部订单页面3 完善订单状态4 查询订单信息总结 现在我们已经完成了家政预约小程序主体功能的开发&#xff0c;包含服务的查看&#xff0c;在线预约已经登录等功能。预约之后就需要家政公司的客服进行派单&#xff0c;由服务人员进行上门服务。在小程…

Hotcoin精彩亮相Consensus 2024 Austin,探索行业风向标

5 月 31 日&#xff0c;由CoinDesk主办的“Consensus 2024”大会在德克萨斯州的奥斯汀市正式落下帷幕。作为全球规模最大、最具影响力的加密货币、区块链、Web3盛会&#xff0c;本次Consensus 2024 Austin吸引来自 100 多个国家/地区的 15,000 多名与会者、6,800 家公司、850 多…