当前位置: 首页 > news >正文

【代码随想录二刷】Day15-二叉树-C++

代码随想录二刷Day15

今日任务

层序遍历
226.翻转二叉树
101.对称二叉树
语言:C++

层序遍历

102.二叉树的层序遍历

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if(root == NULL) return res;queue<TreeNode*> que;que.push(root);while(!que.empty()){vector<int> tmp;int n = que.size();for(int i = 0; i < n; i++){TreeNode* cur = que.front();que.pop();tmp.push_back(cur->val);if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);}res.push_back(tmp);}return res;}
};

107.二叉树的层序遍历II

class Solution {
public:vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> res;if(root == NULL) return res;queue<TreeNode*> que;que.push(root);while(!que.empty()){vector<int> tmp;int n = que.size();for(int i = 0; i < n; i++){TreeNode* cur = que.front();que.pop();tmp.push_back(cur->val);if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);}res.push_back(tmp);}reverse(res.begin(), res.end());return res;}
};

199.二叉树的右视图

class Solution {
public:vector<int> rightSideView(TreeNode* root) {vector<int> res;if(root == NULL) return res;queue<TreeNode*> que;que.push(root);while(!que.empty()){int n = que.size();for(int i = 0; i < n; i++){TreeNode* cur = que.front();que.pop();if(i == n - 1) res.push_back(cur->val);if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);}}return res;}
};

637.二叉树的层平均值

class Solution {
public:vector<double> averageOfLevels(TreeNode* root) {vector<double> res;if(root == NULL) return res;queue<TreeNode*> que;que.push(root);while(!que.empty()){int n = que.size();double sum = 0;for(int i = 0; i < n; i++){TreeNode* cur = que.front();que.pop();sum += cur->val;if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);}res.push_back(sum / n);}return res;}
};

429.N叉树的层序遍历

class Solution {
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> res;if(root == NULL) return res;queue<Node*> que;que.push(root);while(!que.empty()){int n = que.size();vector<int> tmp;for(int i = 0; i < n; i++){Node* cur = que.front();que.pop();tmp.push_back(cur->val);vector<Node*> children = cur->children;for(int j = 0; j < children.size(); j++){que.push(children[j]);}}res.push_back(tmp);}return res;}
};

515.在每个树行中找最大值

class Solution {
public:vector<int> largestValues(TreeNode* root) {vector<int> res;if(root == NULL) return res;queue<TreeNode*> que;que.push(root);while(!que.empty()){int n = que.size();int max = INT_MIN;for(int i = 0; i < n; i++){TreeNode* cur = que.front();que.pop();max = max > cur->val ? max : cur->val;if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);}res.push_back(max);}return res;}
};

116.填充每个节点的下一个右侧节点指针

class Solution {
public:Node* connect(Node* root) {if(root == NULL) return root;queue<Node*> que;que.push(root);while(!que.empty()){int n = que.size();Node* pre = que.front();Node* cur;que.pop();if(pre->left) que.push(pre->left);if(pre->right) que.push(pre->right);for(int i = 1; i < n; i++){cur = que.front();que.pop();pre->next = cur;pre = cur;if(pre->left) que.push(pre->left);if(pre->right) que.push(pre->right);}pre->next = NULL;}return root;}
};

117.填充每个节点的下一个右侧节点指针II
代码和上道题相同

226. 翻转二叉树

链接:https://leetcode.cn/problems/invert-binary-tree/
深度优先遍历-递归(前/后序遍历的递归)
递归三部曲:确定参数和返回值,确定终止条件,确定单层递归逻辑

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;swap(root->left, root->right);invertTree(root->left);invertTree(root->right);return root;}
};

深度优先遍历-迭代(前/后序遍历的迭代)

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;stack<TreeNode*> st;st.push(root);while(!st.empty()){TreeNode* cur = st.top();st.pop();swap(cur->left, cur->right);if(cur->right) st.push(cur->right);if(cur->left) st.push(cur->left);}return root;}
};

广度优先遍历-层序遍历

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;queue<TreeNode*> que;que.push(root);while(!que.empty()){int n = que.size();for(int i = 0; i < n; i++){TreeNode* cur = que.front();que.pop();swap(cur->left, cur->right);if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);}}return root;}
};

101. 对称二叉树

链接:https://leetcode.cn/problems/symmetric-tree/
递归

class Solution {
public:bool compare(TreeNode* left, TreeNode* right){if(left == NULL && right != NULL) return false;else if(left != NULL && right == NULL) return false;else if(left == NULL && right == NULL) return true;else if(left->val != right->val) return false;bool outside = compare(left->left, right->right);bool inside = compare(left->right, right->left);return outside && inside;}bool isSymmetric(TreeNode* root) {if(root == NULL) return root;return compare(root->left, root->right);}
};

迭代

class Solution {
public:bool isSymmetric(TreeNode* root) {if(root == NULL) return root;queue<TreeNode*> que;que.push(root->left);que.push(root->right);while(!que.empty()){TreeNode* node1 = que.front();que.pop();TreeNode* node2 = que.front();que.pop();if(node1 == NULL && node2 != NULL) return false;else if(node1 != NULL && node2 == NULL) return false;else if(node1 != NULL && node2 != NULL && node1->val != node2->val) return false;else if(node1 == NULL && node2 == NULL) continue;que.push(node1->left);que.push(node2->right);que.push(node1->right);que.push(node2->left);}return true;}
};

100.相同的树
递归

class Solution {
public:bool compare(TreeNode* pNode, TreeNode* qNode){if(pNode == NULL && qNode == NULL) return true;else if(pNode == NULL || qNode == NULL) return false;else if(pNode->val != qNode->val) return false;bool left = compare(pNode->left, qNode->left);bool right = compare(pNode->right, qNode->right);return left && right;}bool isSameTree(TreeNode* p, TreeNode* q) {if(p == NULL && q == NULL) return true;else if(p == NULL || q == NULL) return false;return compare(p, q);}
};

迭代

class Solution {
public:bool isSameTree(TreeNode* p, TreeNode* q) {if(p == NULL && q == NULL) return true;else if(p == NULL || q == NULL) return false;queue<TreeNode*> que;que.push(p);que.push(q);while(!que.empty()){TreeNode* node1 = que.front();que.pop();TreeNode* node2 = que.front();que.pop();if(node1 == NULL && node2 == NULL) continue;else if(node1 == NULL || node2 == NULL) return false;else if(node1->val != node2->val) return false;que.push(node1->left);que.push(node2->left);que.push(node1->right);que.push(node2->right);}return true;}
};

572.另一个树的子树
递归

class Solution {
public:bool compare(TreeNode* root, TreeNode* subRoot){if(root == NULL && subRoot == NULL) return true;else if(root == NULL || subRoot == NULL) return false;else if(root->val != subRoot->val) return false;bool left = compare(root->left, subRoot->left);bool right = compare(root->right, subRoot->right);return left && right;}bool dfs(TreeNode* root, TreeNode* subRoot){if(root == NULL && subRoot != NULL) return false;return compare(root, subRoot) || dfs(root->left, subRoot) || dfs(root->right, subRoot);}bool isSubtree(TreeNode* root, TreeNode* subRoot) {return dfs(root, subRoot);}
};

迭代(效率不高)

class Solution {
public:bool isSubtree(TreeNode* root, TreeNode* subRoot) {queue<TreeNode*> que1;que1.push(root);while(!que1.empty()){int n = que1.size();for(int i = 0; i < n; i++){TreeNode* cur = que1.front();que1.pop();if(cur->left) que1.push(cur->left);if(cur->right) que1.push(cur->right);if(cur != NULL && cur->val == subRoot->val){queue<TreeNode*> que2;int flag = 0;que2.push(cur);que2.push(subRoot);while(!que2.empty()){TreeNode* node1 = que2.front();que2.pop();TreeNode* node2 = que2.front();que2.pop();if(node1 == NULL && node2 == NULL) continue;else if(node1 == NULL || node2 == NULL){flag = 1;break;}else if(node1->val != node2->val){flag = 1;break;}//cout << node1->val << " " << node2->val << " " << flag << endl;que2.push(node1->left);que2.push(node2->left);que2.push(node1->right);que2.push(node2->right);}if(flag == 0) return true;}}}return false;}
};

相关文章:

【代码随想录二刷】Day15-二叉树-C++

代码随想录二刷Day15 今日任务 层序遍历 226.翻转二叉树 101.对称二叉树 语言&#xff1a;C 层序遍历 102.二叉树的层序遍历 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if(root NULL) …...

C++为什么能重夺年度语言?

目录一、爷青回1、年初依旧很多大新闻&#xff0c;其中一条就是TIOBE把年度编程语言颁给了C。2、这是什么概念&#xff1f;那一年Java的流行指数是14%。二、C为什么衰落三、C为什么重新流行1、C为什么重新流行起来了呢&#xff1f;2、C究竟做对了什么呢&#xff1f;3、根本原因…...

视频监控实时接入——以海康威视为例(2023.2.16)

海康威视实时视频监控接入学习 2023.2.16引言1、视频协议简介1.1 RTSP——Real Time Streaming Protocol&#xff08;实时流传输协议&#xff09;1.2 RTMP——Real Time Messaging Protocol&#xff08;实时消息传输协议&#xff09;1.3 HLS——HTTP Live Streaming&#xff08…...

推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统是什么。

1. 推荐算法的初步理解 如果说互联网的目标就是连接一切,那么推荐系统的作用就是建立更加有效率的连接,推荐系统可以更有效率的连接用户与内容和服务,节约了大量的时间和成本。 1.1 推荐系统主要解决问题 任务一:挖掘长尾:帮助用户找到想要的物品(音乐、商品、新闻),…...

新手小白入门必看!如何批量注册Twitter账号?

Twitter是目前海外比较流行的社媒营销平台&#xff0c;所以很多从事跨境电商行业的朋友都需要利用多个Twitter账号来推广营销&#xff0c;但是注册和管理多个Twitter账号其实并不是简单的事情。龙哥将会在这里详细讲讲该如何批量注册并且让这些账号不会因为关联被封号&#xff…...

虚拟环境的创建以及labelme的使用教程

本来打算是将这两部分分开的&#xff0c;但写完虚拟环境的创建似乎字数太少了&#xff0c;不过二者有关联&#xff0c;所以就放一起了。简单介绍一下&#xff0c;虚拟环境的创建有win11系统已经Ubuntu系统&#xff0c;labelme教程包括了下载及其使用的全部流程&#xff0c;以及…...

CSS中的BFC详细讲解(易懂)

带你用最简单的方式理解最全面的BFC~~~1.先了解最常见定位方案普通流元素按照其在 HTML 中的先后位置至上而下布局行内元素水平排列&#xff0c;直到当行被占满然后换行&#xff0c;块级元素则会被渲染为完整的一个新行所有元素默认都是普通流定位浮动元素首先按照普通流的位置…...

华为3面,官网显示面试通过了...开始泡池子,进入漫长等待期

背景&#xff1a; 现在双非本科&#xff0c;非计算机科班&#xff0c;有算法方面的奖&#xff0c;有嵌入式开发经历&#xff0c;官网显示面试通过&#xff0c;短信说录用情况在十个工作日内告知&#xff0c;看别人的说法应该是泡池子了。 全程视频面试&#xff0c;一天面完三…...

【新2023】华为OD机试 - 构成的正方形数量(Python)

构成的正方形数量 题目 输入 N 个互不相同的二维整数坐标, 求这 N 个坐标可以构成的正方形数量。(内积为零的两个向量垂直) 输入 第一行输入为 N,N 代表坐标数量,N为正整数。N <= 100 之后的 K 行输入为坐标 x y以空格分隔,x, y 为整数, -10 <= x, y <= 10 输…...

ElasticSearch之RestClient操作索引库和文档

前言&#xff1a;上文介绍了使用DSL语言操作索引库和文档&#xff0c;本篇文章将介绍使用Java中的RestClient来对索引库和文档进行操作。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们&#x1f609;&#x1f609;。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x…...

Lp正则化

一、L1 和 L2范数&#xff08;norm&#xff09;A norm is a mathematical thing that is applied to a vector. The norm of a vector maps vector values to values in [0,∞). In machine learning, norms are useful because they are used to express distances: this vect…...

云原生 -- Docker进阶(Docker-compose,Docker网络简单介绍)

Dockerfile的构建过程 每条保留字段必须为大写字母。Dockerfile每行只支持一条指令&#xff0c;但是每条指令可以带多个参数&#xff0c;并且每条保留字指令后面至少要带有一个参数。从上到下依次执行。每条指令都会创建一个新的镜像层&#xff0c;并提交新的镜像。 大致流程…...

taskset命令:让进程运行在指定CPU上

1. 操作场景 taskset命令&#xff0c;可用于进程的CPU调优&#xff0c;可以把云服务器上运行的某个进程&#xff0c;指定在某个CPU上工作。 本节操作指导用户使用taskset命令让进程运行在指定CPU上。 2. 操作步骤 2.1. 执行如下命令&#xff0c;查看云服务器CPU核数。 cat …...

Pod基本概念与Pod应用生命周期

Pod是一个逻辑抽象概念&#xff0c;kubernetes创建和管理的最小单元&#xff0c;一个Pod由一个容器或多个容器组成。特点&#xff1a;一个Pod可以理解为是一个应用实例&#xff0c;提供服务Pod中容器始终部署在一个Node上Pod中容器共享网络、存储资源Pod主要用法&#xff1a;运…...

DDL 数据定义语言

DDL 数据定义语言 目录概述一、库的管理1、库的创建2、库的修改【一般不修改&#xff0c;容易出现错误】3、库的删除二、表的管理【重要】1、表的创建2、表的修改3、表的删除4、表的复制 【可以跨库复制】练习题概述 数据定义语言 库和表的管理 一、库的管理 创建、修改、删除…...

设计模式概述

1. 概念 设计模式概念的提出&#xff1a;   设计模式最早于1977年在建筑设计行业中被 克里斯托夫亚历山大&#xff08;Christopher Alexander&#xff09; 在他的著作 《建筑模式语言&#xff1a;城镇、建筑、构造》 中提出。   软件工程界在1990年开始了设计模式话题的研…...

华为OD机试 - 箱子之形摆放(Python)| 真题+思路+考点+代码+岗位

箱子之形摆放 题目 有一批箱子(形式为字符串,设为str), 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。 例如:箱子ABCDEFG,空地宽度为3,摆放结果如图: 则输出结果为: AFG BE CD 输入 输入一行字符串,通过空格分隔,前面部…...

第九章:创建用户和用户权限

Windows&#xff1a;创建用户&#xff1a;第一种方法创建用户&#xff1a;先点右上角的工具&#xff0c;然后点击AD用户和计算机双击skills.com打开目录&#xff0c;再双击Users&#xff0c;进入文件夹中在右框中右击空白处&#xff0c;新建用户填充好用户信息后点击下一步然后…...

如何制定人生目标

一、如何分解目标 人生终极目标并不一定要多详细精确&#xff0c;但一定要被分解&#xff0c;要分成长期目标、中期目标和一系列的短期目标&#xff0c;其中短期目标又可以分解为你能够马上操作的一个个的小目标。 二、目标制定的原则 目标制定遵循 SMART-W 原则&#xff1a; …...

用户认证概述

文章目录一、用户身份认证1.1 单一服务器模式1.2 SSO&#xff08;Single Sign On&#xff09;模式1.3 Token模式二、JWT令牌2.1 JWT 令牌说明2.2 JWT令牌的组成2.3 JWT 问题和趋势2.4 JWT 测试一、用户身份认证 1.1 单一服务器模式 一般过程如下&#xff1a; 用户向服务器发送…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...