代码随想录算法训练营第十三天| 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,一经查实,立即删除!

相关文章

rocketmq No route info of this topic 问题排查

Broker配置项 autoCreateTopicEnable true 如果是单节点(master),注释掉这里的配置 #有三个值&#xff1a;SYNC_MASTER&#xff0c;ASYNC_MASTER&#xff0c;SLAVE&#xff1b;同步和异步表示Master和Slave之间同步数据的机制&#xff1b; #brokerRole SYNC_MASTER Pytho…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 土地分配 (100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 土地分配(100分) 🌍 评测功能需要订阅专栏后私信联系清隆解…

阿里云盘手机批量修改文件名

背景 目前刷剧都会使用阿里云盘配合infuse,但是从网上找到的资源经常命名不符合Infuse的刮削规范,导致无法正确建立元数据,虽然PC端可以使用油猴脚本批量修改电视剧名称, 但是经常出现身边并没有电脑(或者电脑上没有油猴脚本)的情况,这时候用手机就很难批量修改文件名,虽然iph…

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

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

游戏心理学Day05

第三章 游戏即学习 《超级马里奥》是游戏史上的经典之作&#xff0c;我们都记得第一次踩到敌人&#xff0c;第一次顶碎砖块时的快乐&#xff0c;也记得为了通过某个关卡而付出的努力和艰辛。当我们掌握了规律和技巧之后&#xff0c;这些难题就不再是难题&#xff0c;因为我们习…

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…

JS包装类:循环中为什么建议用变量存储str.length进行循环判断?

前言 在Javascript通常我们在遍历一个字符串的时候通常使用的方式是 var str "abcdefg"; for(let i0;i<str.length;i){}但在最近的学习中&#xff0c;有人建议我最好应该是下面这样执行。 var str "abcdefg"; for(let i0,len str.length;i<len;i)…

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;于是飞…

llvm 常用命令备忘

执行 IR 上的指令合并优化 pass $ opt –S –instcombine testfile.ll –o output1.ll 执行无效参数优化 pass $ opt –S –deadargelim testfile.ll –o output2.ll C 语言生成 IR 文件 $ clang -emit-llvm -S multiply.c -o multiply.ll C 语言生成 IR 文件 $ clang -cc1 -…

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

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

使用JavaScript实现网页通知功能

如何使用js来实现网页通知功能。即使在用户浏览其他页面时&#xff0c;也能向他们推送通知信息。 废话不多说直接上代码 function showAutoNotification() {if ("Notification" in window) {Notification.requestPermission().then(function(permission) {if (permis…

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

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

Vue 的服务端渲染(SSR)有哪些钩子可以用

在 Vue 的服务端渲染&#xff08;SSR&#xff09;过程中&#xff0c;并不会执行完整的生命周期钩子&#xff0c;只有一部分钩子会在服务器端执行。以下是 Vue SSR 中支持的生命周期钩子&#xff1a; beforeCreate&#xff1a;在实例初始化之后&#xff0c;数据观测 (data obser…

【ARM Cache 与 MMU 系列文章 7.8 – ARMv8/v9 MMU Table 表分配原理及其代码实现 2】

文章目录 MMU Table 表分配原理及其代码实现MMU Table 分配代码实现MMU Table 表分配原理及其代码实现 在做映射的时候所映射的地址范围最大只能是某一级 level table 中 entry 所能支持的最大范围,如果超过这个范围需要在对应 level table 中新增一个entry,这里还是以映射虚…

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

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

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

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