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

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题

在这里插入图片描述
在这里插入图片描述
除了后面两个,都挺简单

二叉树的中序遍历

/*** 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:
vector<int>ans;void inorder(TreeNode* root){if(root==nullptr){return ;}inorder(root->left);int v = root->val;ans.push_back(v);inorder(root->right);}vector<int> inorderTraversal(TreeNode* root) {inorder(root);return ans;}
};

二叉树的最大深度

/*** 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:int maxDepth(TreeNode* root) {if(root==nullptr){return 0;}int ll=maxDepth(root->left);int rr=maxDepth(root->right);return max(ll,rr)+1;}
};

翻转二叉树

/*** 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->left==nullptr&&root->right==nullptr){return nullptr;}TreeNode* temp=nullptr;temp=root->left;root->left=root->right;root->right=temp;TreeNode(root->left);TreeNode(root->right);}
};

对称二叉树

/*** 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:vector<int> a; // a[100005];vector<int> b; //  int b[100005];void dfs1(TreeNode* root) {if (root == nullptr) {a.push_back(1000);return;}a.push_back(root->val);dfs1(root->left);dfs1(root->right);}void dfs2(TreeNode* root) {if (root == nullptr) {return b.push_back(1000);}b.push_back(root->val);dfs2(root->right);dfs2(root->left);}bool isSymmetric(TreeNode* root) {dfs1(root);dfs2(root);if (a.size() != b.size()) {return 0;}//cout<<a.size();for (int i = 0; i < a.size(); i++) {cout << a[i] << "  " << b[i] << endl;}for (int i = 0; i < a.size(); i++) {if (a[i] != b[i])return 0;}return 1;}
};

二叉树的直径

/*** 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:int maxDepth(TreeNode* root, int& ans){if (!root)return 0;int left = maxDepth(root->left, ans);int right = maxDepth(root->right, ans);ans = max(ans, left + right);return max(left, right) + 1;}int diameterOfBinaryTree(TreeNode* root) {int ans = 0;maxDepth(root, ans);return ans;}
};

二叉树层序遍历【有个for的bug自己看了好久】

/*** 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:vector<vector<int>> levelOrder(TreeNode* root) {if (root == nullptr)return {};vector<vector<int>> ans;queue<TreeNode*> q;q.push(root);while (q.size()) {vector<int> vals;// auto x=q.front();int size = q.size(); //!!!!!!!for(int i=0;i<size;i++){// for (int n = q.size(); n--;) {auto node = q.front();q.pop();vals.push_back(node->val);if (node->left)q.push(node->left);if (node->right)q.push(node->right);}// for (int n = q.size(); n--;) {//     auto node = q.front();//     q.pop();//     vals.push_back(node->val);//     if (node->left)//         q.push(node->left);//     if (node->right)//         q.push(node->right);// }ans.emplace_back(vals);}return ans;}
};
        int size = q.size();for(int i=0;i<size;i++){    这个地方size一定得先计算出来,要不然会有错误!!size值就会在遍历中发生变化

将有序数组转换为二叉搜索树

/*** 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* sortedArrayToBST(vector<int>& nums) {}
};

验证二叉搜索树

/*** 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 isValidBST(TreeNode* root) {if(root==nullptr){return 1;}int p=root->val;if(root->left){int lv=root->left->val;if(lv>=p)return 0;}if(root->right){int rv=root->right->val;if(rv<=p)return 0;}return isValidBST(root->left) && isValidBST(root->right);}
};
  1. 二叉搜索树中第 K 小的元素
/*** 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:vector<int>v;void dfs(TreeNode* root){if(root==nullptr){return ;}dfs(root->left);v.push_back(root->val);dfs(root->right);}int kthSmallest(TreeNode* root, int k) {dfs(root);return v[k-1];}
};

二叉树的右视图

/*** 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 bfs(TreeNode* root) {if (root == nullptr)return;queue<TreeNode*> q;q.push(root);while (q.size()) {int size = q.size();for (int i = 0; i < size; i++) {auto x = q.front();if(i==size-1) {ans.push_back(x->val);}q.pop();if (x->left)q.push(x->left);if (x->right)q.push(x->right);}}}vector<int> ans;vector<int> rightSideView(TreeNode* root) {bfs(root);return ans;}
};
  1. 二叉树展开为链表
/*** 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:vector<TreeNode*>v;void dfs(TreeNode* root){if(root==nullptr){return ;}v.push_back(root);dfs(root->left);dfs(root->right);}void flatten(TreeNode* root) {dfs(root);TreeNode* ans =root;for(int i=1;i<v.size();i++){TreeNode* p=v[i];ans->left=nullptr;ans->right=p;ans=p;}return ;}
};

从前序与中序遍历序列构造二叉树

/*** 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* buildTree(vector<int>& preorder, vector<int>& inorder) {if (preorder.empty()) { // 空节点return nullptr;}int left_size = ranges::find(inorder, preorder[0]) -inorder.begin(); // 左子树的大小vector<int> pre1(preorder.begin() + 1,preorder.begin() + 1 + left_size);vector<int> pre2(preorder.begin() + 1 + left_size, preorder.end());vector<int> in1(inorder.begin(), inorder.begin() + left_size);vector<int> in2(inorder.begin() + 1 + left_size, inorder.end());TreeNode* left = buildTree(pre1, in1);TreeNode* right = buildTree(pre2, in2);return new TreeNode(preorder[0], left, right);}
};

路径总和III

/*** 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:int cnt = 0;int sum=0;void dfs(TreeNode* root, int targetSum) {if (root == nullptr)return;cnt = 0;dfs2(root, root->val, targetSum);cout << cnt << endl;sum+=cnt;dfs(root->left, targetSum);dfs(root->right, targetSum);}void dfs2(TreeNode* root, int s, int targetSum) {if (s == targetSum) {cnt += 1;}int p = root->val;if (root->left) {dfs2(root->left, s + root->left->val, targetSum);}if (root->right) {dfs2(root->right, s + root->right->val, targetSum);}}int pathSum(TreeNode* root, int targetSum) {dfs(root, targetSum);return sum;}
};

后面俩不太会

相关文章:

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题 除了后面两个&#xff0c;都挺简单 二叉树的中序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …...

[安全实战]Python程序打包为EXE的安全加固全攻略(加密+混淆+签名)

Python程序打包为EXE的安全加固全攻略 (加密+混淆+签名:三位一体的Python程序保护体系) 摘要 本文深度解析Python程序打包为EXE的全流程安全防护方案,涵盖加密算法选择、代码混淆技术、反逆向工程等核心安全策略。通过典型攻击防护方案、商业级加固方案对比,打造企业级…...

【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)

原件获取列表&#xff1a; 系统测试方案-2.docx B-Web安全服务渗透测试模板.docx 压力测试报告.docx安全测试用例及解析.docx 测试计划.doc 测试需求规范.doc 测试需求指南.docx 测试用例设计白皮.doc 单元测试报告模板.doc 单元测试计划模板.doc 回归测试指南.doc 集成测试报…...

Linux的联网网络管理攻略

RHEL9版本特点 在RHEL7版本中&#xff0c;同时支持network.service和NetworkManager.service&#xff08;简称NM&#xff09;。 在RHEL8上默认只能通过NM进行网络配置&#xff0c;包括动态ip和静态ip,若不开启NM&#xff0c;否则无法使用网络RHEL8依然支持network.service&am…...

Zookeeper三台服务器三节点集群部署(docker-compose方式)

1. 准备工作 - 服务器:3 台服务器,IP 地址分别为 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安装 Docker:确保每台服务器已安装 Docker 和 Docker Compose。 - 网络通信:确保三台服务器之间可以通过 IP 地址互相访问,并开放以下端口: - `2181`:Zookeeper 客户…...

ISO26262-浅谈用例导出方法和测试方法

目录 1 摘要2 测试方法3 测试用例导出方法4 测试方法与用例导出方法的差异和联系5 结论 1 摘要 ISO26262定义了测试方法和用例导出方法&#xff0c;共同保证产品的开发质量。但在刚开始学习ISO26262的时候&#xff0c;又不是非常清晰地理解它俩的区别和联系。本文主要对它俩的…...

Linux上位机开发实践(SoC和MCU的差异)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 soc一般是指跑linux的芯片&#xff0c;而mcu默认是跑rtos的芯片&#xff0c;两者在基本原理方面其实差异不大。只不过&#xff0c;前者由于性能的原…...

【基于Fluent+Python耦合的热管理数字孪生系统开发:新能源产品开发的硬核技术实践】

引言&#xff1a;热管理数字孪生的技术革命 在新能源领域&#xff08;如动力电池、储能系统、光伏逆变器等&#xff09;&#xff0c;热管理是决定产品性能与安全的核心问题。传统热设计依赖实验与仿真割裂的流程&#xff0c;而数字孪生技术通过实时数据驱动与动态建模&#xf…...

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件&#xff0c;在上架app store connect或做testflight测试的时候&#xff0c;它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑&#xff0c;假如没有mac电…...

详细解释浏览器是如何渲染页面的?

渲染流程概述 渲染的目标&#xff1a;将HTML文本转化为可以看到的像素点 当浏览器的网络线程收到 HTML 文档后&#xff0c;会产生一个渲染任务&#xff0c;并将其传递给渲染主线程的消息队列。在事件循环机制的作用下&#xff0c;渲染主线程取出消息队列中的渲染任务&#xff0…...

swift-12-Error处理、关联类型、assert、泛型_

一、错误类型 开发过程常见的错误 语法错误&#xff08;编译报错&#xff09; 逻辑错误 运行时错误&#xff08;可能会导致闪退&#xff0c;一般也叫做异常&#xff09; 2.1 通过结构体 第一步 struct MyError : Errort { var msg: String &#xff5d; 第二步 func divide(_ …...

如何查看HTTP状态码?

目录 一、HTTP状态码查看方法 1. ​​浏览器开发者工具​​ 2. ​​命令行工具​​ 3. ​​服务器日志分析​​ 二、HTTP状态码分类与核心含义 1. ​​信息类&#xff08;1xx&#xff09;​​ 2. ​​成功类&#xff08;2xx&#xff09;​​ 3. ​​重定向类&#xff08…...

下采样(Downsampling)

目录 1. 下采样的定义与作用​​ ​​2. 常见下采样方法​​ ​​(1) 池化&#xff08;Pooling&#xff09;​​ ​​(2) 跨步卷积&#xff08;Strided Convolution&#xff09;​​ ​​(3) 空间金字塔池化&#xff08;SPP&#xff09;​​ ​​3. PyTorch 实现示例​​ …...

PostgreSQL 常用客户端工具

PostgreSQL 常用客户端工具 PostgreSQL 拥有丰富的客户端工具生态系统&#xff0c;以下是各类常用工具的详细分类和介绍&#xff1a; 一 图形化客户端工具 1.1 跨平台工具 工具名称特点适用场景许可证pgAdmin官方出品&#xff0c;功能全面开发/运维PostgreSQLDBeaver支持多…...

Nacos安装及数据持久化

1.Nacos安装及数据持久化 1.1下载nacos 下载地址&#xff1a;https://nacos.io/download/nacos-server/ 不用安装&#xff0c;直接解压缩即可。 1.2配置文件增加jdk环境和修改单机启动standalone 找到bin目录下的startup.cmd文件&#xff0c;添加以下语句(jdk路径根据自己…...

ES关系映射(数据库中的表结构)

ES常见数据类型及用途 1. 基础类型 ES类型对应MySQL类型特点示例场景textVARCHAR/TEXT全文分词搜索&#xff0c;默认用标准分词器商品描述、日志内容keywordCHAR/VARCHAR精确匹配&#xff0c;不分词订单号、标签、枚举值&#xff08;如状态码&#xff09;longBIGINT64位整数ID、…...

FPGA_YOLO(四)用HLS实现循环展开以及存储模块

Vivado HLS&#xff08;High-Level Synthesis&#xff0c;高层次综合&#xff09;是赛灵思&#xff08;Xilinx&#xff09;在其 Vivado 设计套件 中提供的一款工具&#xff0c;用于将 高级编程语言&#xff08;如 C、C、SystemC&#xff09; 直接转换为 硬件描述语言&#xff0…...

ASP.NET MVC 实现增删改查(CRUD)操作的完整示例

提供一个完整的 ASP.NET MVC 实现增删改查&#xff08;CRUD&#xff09;操作的示例。该示例使用 SQL Server 数据库&#xff0c;以一个简单的 Product 实体为例。 步骤 1&#xff1a;创建 ASP.NET MVC 项目 首先&#xff0c;在 Visual Studio 中创建一个新的 ASP.NET MVC 项目…...

MCP理解笔记及deepseek使用MCP案例介绍

文章目录 一、MCP介绍&#xff08;1&#xff09;使用MCP与之前的AI比较&#xff08;2&#xff09;原理&#xff08;3&#xff09;优点 二、deepseek使用MCP使用案例介绍 一、MCP介绍 全称 模型上下文协议 来源 由Claude母公司Anthropic于24年底开源发布 简介 AI大模型的标准化…...

# 手写数字识别:使用PyTorch构建MNIST分类器

手写数字识别&#xff1a;使用PyTorch构建MNIST分类器 在这篇文章中&#xff0c;我将引导你通过使用PyTorch框架构建一个简单的神经网络模型&#xff0c;用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集&#xff0c;包含了60,000张训练图像和10,000张…...

扩展虚拟机磁盘空间并使其在Linux系统中可用的步骤总结

VMware在虚拟机扩展空间时&#xff0c;若想扩展到150G&#xff0c;那么所在盘的空闲空间须大于150G&#xff0c;否则VM将不允许扩展。 1&#xff1a;确认新磁盘空间是否被识别 使用 lsblk 或 fdisk -l 命令检查 /dev/sda 的大小是否已经更新到新的容量&#xff08;例如从原来的…...

A股周度复盘与下周策略 的deepseek提示词模板

以下是反向整理的股票大盘分析提示词模板&#xff0c;采用结构化框架数据占位符设计&#xff0c;可直接套用每周市场数据&#xff1a; 请根据一下markdown格式的模板&#xff0c;帮我检索整理并输出本周股市复盘和下周投资策略 【A股周度复盘与下周策略提示词模板】 一、市场…...

dev_set_drvdata、dev_get_drvdata使用详解

在Linux内核驱动开发中&#xff0c;dev_set_drvdata() 及相关函数用于管理设备驱动的私有数据&#xff0c;是模块化设计和数据隔离的核心工具。以下从函数定义、使用场景、示例及注意事项等方面进行详细解析&#xff1a; 一、函数定义与作用 核心函数 dev_set_drvdata() 和 dev…...

数据驱动未来:大数据在智能网联汽车中的深度应用

数据驱动未来:大数据在智能网联汽车中的深度应用 引言 随着智能网联汽车(Intelligent Connected Vehicles,ICV)的快速发展,数据已成为其核心驱动力。从实时交通数据到车辆传感器信息,大数据的深度应用正在让智能汽车更安全、更高效、更智能化。那么,大数据如何赋能智能…...

LeetCode:DFS综合练习

简单 1863. 找出所有子集的异或总和再求和 一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果&#xff1b;如果数组为 空 &#xff0c;则异或总和为 0 。 例如&#xff0c;数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 1 。 给你一个数组 nums &#xff0c;请你求出 n…...

Perf学习

重要的能解决的问题是这些&#xff1a; perf_events is an event-oriented observability tool, which can help you solve advanced performance and troubleshooting functions. Questions that can be answered include: Why is the kernel on-CPU so much? What code-pa…...

齐次坐标变换+Unity矩阵变换

矩阵变换 变换&#xff08;transform)&#xff1a;指的是我们把一些数据&#xff0c;如点&#xff0c;方向向量甚至是颜色&#xff0c;通过某种方式&#xff08;矩阵运算&#xff09;&#xff0c;进行转换的过程。 变换类型 线性变换&#xff1a;保留矢量加和标量乘的计算 f(x)…...

Pandas取代Excel?

有人在知乎上提问&#xff1a;为什么大公司不用pandas取代excel&#xff1f; 而且列出了几个理由&#xff1a;Pandas功能比Excel强大&#xff0c;运行速度更快&#xff0c;Excel除了简单和可视化界面外&#xff0c;没有其他更多的优势。 有个可怕的现实是&#xff0c;对比Exce…...

启动vite项目报Unexpected “\x88“ in JSON

启动vite项目报Unexpected “\x88” in JSON 通常是文件被防火墙加密需要寻找运维解决 重启重装npm install...

HTTP测试智能化升级:动态变量管理实战与效能跃迁

在Web应用、API接口测试等领域&#xff0c;测试场景的动态性和复杂性对测试数据的灵活管理提出了极高要求。传统的静态测试数据难以满足多用户并发、参数化请求及响应内容验证等需求。例如&#xff0c;在电商系统性能测试中&#xff0c;若无法动态生成用户ID、订单号或实时提取…...