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

目录

一、102. 二叉树的层序遍历

二、226. 翻转二叉树

三、101. 对称二叉树


一、102. 二叉树的层序遍历

题目链接:力扣

文章讲解:代码随想录

视频讲解: 讲透二叉树的层序遍历 | 广度优先搜索 | LeetCode:102.二叉树的层序遍历

题目:

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/class Solution {
public://迭代法void order(vector<vector<int>> &ans, int depth, TreeNode *node)//参数及返回值{if (!node) return;//停止条件if (depth == ans.size()) ans.push_back(vector<int>());//每层操作ans[depth].push_back(node->val);//中order(ans, depth+1, node->left);//左order(ans, depth+1, node->right);//右return; }vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ans;/*queue<TreeNode*> queue;if (root) queue.push(root);while (!queue.empty()){int size = queue.size();//一层的每个结点vector<int> floor;for (int i = 0; i < size; i++)//一层每个结点进行操作{TreeNode *node = queue.front();queue.pop();floor.push_back(node->val);if (node->left) queue.push(node->left);if (node->right) queue.push(node->right);}ans.push_back(floor);}*/order(ans, 0, root);return ans;}
};

时间复杂度: O(n)                                        空间复杂度: O(n)

⏲:5:25

总结:图论中的广度优先遍历

二、226. 翻转二叉树

题目链接:力扣

文章讲解:代码随想录

视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树 | LeetCode:226.翻转二叉树

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

代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* invertTree(TreeNode* root) {//递归法if (!root) return root;/*swap(root->left, root->right);invertTree(root->left);invertTree(root->right);*///迭代法stack<TreeNode*> stack;stack.push(root);while (!stack.empty()){TreeNode* node = stack.top();stack.pop();swap(node->left, node->right);if (node->left) stack.push(node->left);if (node->right) stack.push(node->right);}return root;}
};

时间复杂度: O(n)                                        空间复杂度: O(n)

⏲:2:37

总结:先序遍历和后序遍历

三、101. 对称二叉树

题目链接:力扣

文章讲解:代码随想录

视频讲解:同时操作两个二叉树 | LeetCode:101. 对称二叉树

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

代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool compare(TreeNode* left, TreeNode*right){if (!left && right) return false;else if(!right && left) return false;else if(!right && !left) return true;if (right->val != left->val) return false;return compare(left->left, right->right) && compare(left->right, right->left);}bool isSymmetric(TreeNode* root) {if (!root) return true;return compare(root->left, root->right); }
};

时间复杂度: O(n)                                        空间复杂度: O(n)

⏲:5:02

总结:对称是比较两棵子树是否相对。通过递归函数的返回值来判断两个子树的内侧节点和外侧节点分别是否相等,是在两棵树上进行比较!

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

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

相关文章

TCP传输收发

TCP通信: TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t ad…

先缓存第二集抖音接入 ,最近加班猛,就分享简单的知识,如何使用:关于使用replace的用法正则表达式

1、需求&#xff1a;比如在cocos creator策划让你制作一个预制体&#xff0c;标题要读取配置&#xff0c;然后中间显示的内容要滚动的&#xff0c;要做成一个通用的&#xff0c;然后给到的配置表是这样子的: 配置表&#xff1a;假设字段是这样子的 content "内容标题&…

Intel 历代 CPU 型号

以下所有型号均为一整个系列&#xff0c;加上前缀、后缀啥的&#xff0c;差异化早在1970年代就被美国资本家玩明白了&#xff0c;充分地占领了市场。 CPU型号时间位数频率内存寻址地址总线说明400419714位740KHz640B4001(ROM)&#xff0c;4002(RAM)&#xff0c;4003(register)…

20个Python函数程序实例

前面介绍的函数太简单了&#xff1a; 以下是 20 个不同的 Python 函数实例 下面深入一点点&#xff1a; 以下是20个稍微深入一点的&#xff0c;使用Python语言定义并调用函数的示例程序&#xff1a; 20个函数实例 简单函数调用 def greet():print("Hello!")greet…

寻找最近的公共父视图

题目 求两个视图的最近公共父视图 暴力解法 采用的是两个 while 循环嵌套迭代来查询最近的公共父视图, 时间复杂度 O(n), 详见 Masonry 的实现&#xff1a; - (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view {MAS_VIEW *closestCommonSuperview nil;MAS_VIEW *…

css-vxe-form-item中输入框加自定义按钮(校验位置错误)

1.浮动错误效果 提示内容不对 2.不使用浮动&#xff0c;使用行内块元素 代码如下 <vxe-form-item title"yoyo:" field"assembleWorkNo" span"8"><template #default><vxe-input style"width:70%;display:inline-block;&quo…

NLP神器Transformers入门简单概述

在这篇博客中,我们将深入探索 🤗 Transformers —— 一个为 PyTorch、TensorFlow 和 JAX 设计的先进机器学习库。🤗 Transformers 提供了易于使用的 API 和工具,使得下载和训练前沿的预训练模型变得轻而易举。利用预训练模型不仅能减少计算成本和碳足迹,还能节省从头训练…

全天候购药系统(微信小程序+web后台管理)

PurchaseApplet 全天候购药系统&#xff08;微信小程序web后台管理&#xff09; 传统线下购药方式存在无法全天候向用户提供购药服务&#xff0c;无法随时提供诊疗服务等问题。为此&#xff0c;运用软件工程开发规范&#xff0c;充分调研建立需求模型&#xff0c;编写开发文档…

Java输入和输出处理

一、Java I/O 文件、内存、键盘--->程序--->文件、内存、控制台 二、文件 相关记录或放在一起的数据的集合 思考&#xff1a; Java程序如何访问文件属性&#xff1f; 解答&#xff1a; Java API:java.io.File类 三、File类 File类的常用方法 方法名称说明boole…

maven项目结构管理统一项目配置操作

一、maven分模块开发 Maven 分模块开发 1.先创建父工程&#xff0c;pom.xml文件中&#xff0c;打包方式为pom 2.然后里面有许多子工程 3.我要对父工程的maven对所有子工程进行操作 二、解读maven的结构 1.模块1 <groupId>org.TS</groupId><artifactId>TruthS…

黑马点评-分布式锁业务

分布式锁原理和实现 分布式系统部署了多个tomcat&#xff0c;每个tomcat都有一个属于自己的jvm&#xff0c;那么假设在服务器A的tomcat内部&#xff0c;有两个线程&#xff0c;这两个线程由于使用的是同一份代码&#xff0c;那么他们的锁对象是同一个&#xff0c;是可以实现互…

智能dns服务器、自建DNS服务器、自架DNS服务器、DNS分流

smart安装链接 [https://github.com/pymumu/smartdns/releases](https://github.com/pymumu/smartdns/releases)wget https://github.com/pymumu/smartdns/releases/download/all-best-ip/smartdns.1.2022.05.03-1046.x86_64-linux-all.tar.gz[rootlocalhost ~]# ls anaconda-k…

前端面试实战补丁24.3.7

1.CSS的position属性 在CSS中&#xff0c;position属性用于指定元素的定位方式。position属性有以下几个可能的值&#xff1a; static&#xff1a; 默认值。元素按照文档流进行定位&#xff0c;不会被特别地定位&#xff0c;也不会受到top、right、bottom、left或z-index属性的…

2024 PhpStorm激活,分享几个PhpStorm激活的方案

文章目录 PhpStorm 公司简介我这边使用PhpStorm的理由PhpStorm 2023.3 最新变化AI Assistant 预览阶段结束 正式版基于 LLM 的代码补全测试代码生成编辑器内代码生成控制台中基于 AI 的错误解释 Pest 更新PHP 8.3 支持#[\Override] 特性新的 json_validate() 函数类型化类常量弃…

effective c++ 笔记 条款41-46

条款41&#xff1a;了解隐式接口和编译器多态 显式接口和运行期多态&#xff1a; 面向对象的世界总是以显式接口和运行期多态解决问题 显式接口的构成&#xff1a; 函数名称&#xff0c;参数类型&#xff0c;返回类型&#xff0c;常量性也包括编译器产生的copy构造函数和copy …

142.环形链表II

142.环形链表II 力扣题目链接(opens new window) 题意&#xff1a; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0…

Linux性能分析之CPU实战

本课程专注于教授学员如何利用各种工具和技术来分析Linux系统中的CPU性能问题。通过实际操作和案例研究&#xff0c;学员将深入了解CPU性能优化和故障排除&#xff0c;提升其在Linux环境下的技能水平。 课程大小&#xff1a;1.9G 课程下载&#xff1a;https://download.csdn.…

例行性工作(at,crontab)

目录 单一执行的例行性工作at 语法 选项 时间格式 at的工作文件存放目录 at工作的日志文件 实例 命令总结&#xff1a; 循环执行的例行性工作crond 语法 选项 crontab工作调度对应的系统服务 crontab工作的日志文件 用户定义计划任务的文件所在目录 动态查看 crontab文件格式 文…

js拓展-内置对象

目录 1. 数组对象 1.1 数组的四种方式 1.2 JS中数组的特点 1.3 常用方法 2. 日期对象 2.1 日期对象的创建 2.2 日期对象的方法 2.3 案例&#xff1a;输出现在的时间 3. 全局对象 3.1 字符串转换成数字类型 3.2 编码解码函数 1. 数组对象 注&#xff1a;数组在JS中是一…

企业如何进行数据分析,实现科学决策和业务增长

在当今信息时代&#xff0c;数据已经成为企业运营和发展的重要资源。企业拥有大量的数据&#xff0c;包括但不限于销售数据、客户数据、市场数据、企业内部管理数据等等&#xff0c;这些数据记录了企业的运营状况和业务发展情况。但是&#xff0c;这些数据如果不进行分析和利用…