二刷代码随想录第15天

513. 找树左下角的值

  • 找到深度最大的点,遍历方式左边节点在右边节点前面,找到就返回,一定就是最左下角的值了
class Solution {
public:int max_depth = -1;int result = 0;int findBottomLeftValue(TreeNode* root) {traversal(root, 0);return result;}void traversal(TreeNode* node, int depth) {if (node->left == nullptr && node->right == nullptr) {if (depth > max_depth) {max_depth = depth;result = node->val;return;}}if (node->left) {depth++;traversal(node->left, depth);depth--;}if (node->right) {depth++;traversal(node->right, depth);depth--;}}
};

112. 路径总和

  • 不需要求路径,需要返回一个bool值代表找没找到
class Solution {
public:int sum = 0;bool hasPathSum(TreeNode* root, int targetSum) {if (root == nullptr) {return false;}sum += root->val;if (root->left == nullptr && root->right == nullptr) {if (sum == targetSum) {return true;}return false;}if (root->left) {bool left = hasPathSum(root->left, targetSum);if(left){return true;}sum -= root->left->val;}if (root->right) {bool right = hasPathSum(root->right, targetSum);if(right){return true;}sum -= root->right->val;}return false;}
};

13. 路径总和 II

  • 需要求路径,就不用返回值
class Solution {
public:vector<vector<int>> result;vector<int> path;int sum = 0;vector<vector<int>> pathSum(TreeNode* root, int targetSum) {if (root == nullptr) {return result;}sum += root->val;path.push_back(root->val);get_path(root, targetSum);return result;}void get_path(TreeNode* node, int targetSum) {if (node->left == nullptr && node->right == nullptr) {if (sum == targetSum) {result.push_back(path);}return;}if (node->left) {sum += node->left->val;path.push_back(node->left->val);get_path(node->left, targetSum);sum -= node->left->val;path.pop_back();}if (node->right) {sum += node->right->val;path.push_back(node->right->val);get_path(node->right, targetSum);sum -= node->right->val;path.pop_back();}return;}
};

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

  • 重点是找到前序遍历的第一个节点,在中序遍历中把他一分为二,再把前序遍历剩下的节点也一分为二,不断重复这个过程
class Solution {
public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if (preorder.size() == 0) {return nullptr;}int val = preorder[0];int index = 0;for (int i = 0; i < inorder.size(); i++) {if (inorder[i] == val) {index = i;}}vector<int> left_preorder;vector<int> right_preorder;vector<int> left_inorder;vector<int> right_inorder;for (int i = 0; i < index; i++) {left_inorder.push_back(inorder[i]);}for (int i = index + 1; i < inorder.size(); i++) {right_inorder.push_back(inorder[i]);}for (int i = 1; i <= index; i++) {left_preorder.push_back(preorder[i]);}for (int i = index + 1; i < preorder.size(); i++) {right_preorder.push_back(preorder[i]);}TreeNode* node = new TreeNode(val);node->left = buildTree(left_preorder, left_inorder);node->right = buildTree(right_preorder, right_inorder);return node;}
};

106. 从中序与后序遍历序列构造二叉树

  • 重点是从后序遍历中找到最后一个节点,在中序遍历中把他一分为二,再把后序遍历的剩下的节点也一分为二,不断重复这个过程
class Solution {
public:TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {if (postorder.size() == 0) {return nullptr;}int val = postorder[postorder.size() - 1];int index = 0;for (int i = 0; i < inorder.size(); i++) {if (inorder[i] == val) {index = i;}}TreeNode* node = new TreeNode(val);vector<int> left_inorder;vector<int> right_inorder;vector<int> left_postorder;vector<int> right_postorder;for (int i = 0; i < index; i++) {left_inorder.push_back(inorder[i]);}for (int i = index + 1; i < inorder.size(); i++) {right_inorder.push_back(inorder[i]);}for (int i = 0; i < index; i++) {left_postorder.push_back(postorder[i]);}for (int i = index; i < postorder.size() - 1; i++) {right_postorder.push_back(postorder[i]);}node->left = buildTree(left_inorder, left_postorder);node->right = buildTree(right_inorder, right_postorder);return node;}
};

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

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

相关文章

vue3的prop

- 父组件需要传多个值给子组件 把值放对象&#xff0c;通过v-bind传整个对象 父组件 <script setup> import BlogPost from ./BlogPost.vue import { reactive } from vue; // 要传给子组件的所有值&#xff0c;用reactive包了该对象后&#xff0c;父组件的值变了&#…

Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成

Ubuntu下的DoxygenVScode实现C/C接口文档自动生成 1、 Doxygen简介 Doxygen 是一个由 C 编写的、开源的、跨平台的文档生成系统。最初主要用于生成 C 库的 API 文档&#xff0c;但目前又添加了对 C、C#、Java、Python、Fortran、PHP 等语言的支持。其从源代码中提取注释&…

uniapp强制修改radio-group内单选组件的状态方法

在uniapp开发中&#xff0c;需要在radio-group内部切换时做判断&#xff0c;提醒客户是否要变换radio的值&#xff0c;但是大家知道radio是单选组件&#xff0c;往往你点击后&#xff0c;是不能再修改状态的&#xff0c;就算你在点击后做判断&#xff0c;修改current的值&#…

Python plotly库介绍

一、引言 在数据可视化领域&#xff0c;Python提供了众多强大的库。其中&#xff0c;plotly是一个功能强大、交互式的可视化库&#xff0c;可以创建各种类型的图表&#xff0c;包括线图、散点图、柱状图、饼图、3D图表等。它不仅提供了美观的可视化效果&#xff0c;还支持交互式…

中国高铁、中兴通讯和中国 装备制造业的发展中能分别获得哪些启示

题目 【2015 年国考省级以上第四题】阅读“给定资料 4”,谈谈你从中国高铁、中兴通讯和中国装备制造业的发展中能分别获得哪些启示。(20 分) 要求&#xff1a;(1)紧扣材料,重点突出&#xff1b;(2)观点明确,表述有条理&#xff1b;(3)不超过 500 字。 材料 材料4&#xff1a…

Java全栈开发:宠物医院管理系统项目实战

Java全栈开发:宠物医院管理系统项目实战 项目介绍 本文将介绍一个基于Spring Boot + Vue.js的宠物医院管理系统的开发过程。该系统主要用于帮助宠物医院管理日常运营,包括患者管理、预约挂号、处方开具等功能。 技术栈 后端技术 Spring Boot 2.7.xSpring SecurityMyBatis…

BERT的中文问答系统36-2

为了使聊天机器人在生成答案时不依赖于特定的训练数据集&#xff0c;我引入其他方法来生成答案。例如&#xff0c;可以使用预训练的语言模型&#xff08;如BERT&#xff09;直接生成答案&#xff0c;或者使用搜索引擎来获取答案。以下BERT的中文问答系统36-1改进后的代码 1.引入…

升级智享 AI 直播三代:领航原生直播驶向自动化运营新航道

在瞬息万变的数字商业世界&#xff0c;直播行业恰似一艘破浪前行的巨轮&#xff0c;原生直播作为初始 “航船”&#xff0c;在历经风雨后&#xff0c;终于迎来智享 AI 直播三代这股强劲 “东风”&#xff0c;校准航向&#xff0c;开启自动化运营的全新航道&#xff0c;驶向一片…

鸿蒙多线程应用-taskPool

并发模型 并发模型是用来实现不同应用场景中并发任务的编程模型&#xff0c;常见的并发模型分为基于内存共享的并发模型和基于消息通信的并发模型。 Actor并发模型作为基于消息通信并发模型的典型代表&#xff0c;不需要开发者去面对锁带来的一系列复杂偶发的问题&#xff0c;同…

JavaScript实用工具lodash库

Lodash中文文档: Lodash 简介 | Lodash中文文档 | Lodash中文网 Lodash是一个功能强大、易于使用的JavaScript实用工具库&#xff0c;它提供了丰富的函数和工具&#xff0c;能够方便地处理集合、字符串、数值、函数等多种数据类型。通过使用Lodash&#xff0c;开发者可以大幅…

数据结构-最短路径问题

一.问题分类 二.无权图单源最短路算法 dist[]数组记录的是个个顶点到源点的距离这个数组的下标表示顶点 源点到自己的距离是0,dist[s]0 path[]数组记录的是这个顶点的前驱&#xff0c;可以同过这个数组找到源点到个个顶点的距离 代码如下 void Unweighted(MGraph Graph, Ver…

ulimit -n是1024无法启动redis

ulimit -n 命令显示的是当前 shell 会话中可以打开的最大文件描述符数。如果这个值设置得太低&#xff0c;可能会导致 Redis 无法启动&#xff0c;因为 Redis 需要大量的文件描述符来处理客户端连接、持久化文件等。 默认情况下&#xff0c;Redis 可能需要更多的文件描述符&am…

Vue.js 实现用户注册功能

在本篇博客中&#xff0c;我们将通过一个简单的例子来展示如何使用 Vue.js 来实现一个用户注册功能。我们将创建一个包含用户名、邮箱和密码输入的表单&#xff0c;并在用户点击“创建账号”按钮时进行简单的验证。 完整代码 <!DOCTYPE html> <html lang"en&q…

transformers训练(NLP)阅读理解(多项选择)

简介 在阅读理解任务中&#xff0c;有一种通过多项选择其中一个答案来训练机器的阅读理解。比如&#xff1a;给定一个或多个文档h,以及一个问题S和对应的多个答案候选&#xff0c;输出问题S的答案E&#xff0c;E是答案候选中的某一个选项。 这样的目的就是通过文档&#xff0c…

【Java 学习】面向程序的三大特性:封装、继承、多态

引言 1. 封装1.1 什么是封装呢&#xff1f;1.2 访问限定符1.3 使用封装 2. 继承2.1 为什么要有继承&#xff1f;2.2 继承的概念2.3 继承的语法2.4 访问父类成员2.4.1 子类中访问父类成员的变量2.4.2 访问父类的成员方法 2.5 super关键字2.6 子类的构造方法 3. 多态3.1 多态的概…

impala入门与实践

1.impala基本介绍 impala是cloudera提供的一款高效率的sql查询工具&#xff0c;提供实时的查询效果&#xff0c;官方测试性能比hive快10到100倍&#xff0c;其sql查询比sparkSQL还要更加快速&#xff0c;号称是当前大数据领域最快的查询sql工具。impala是参照谷歌的新三篇论文…

shell查看服务器的内存和CPU,实时使用情况

要查看服务器的内存和 CPU 实时使用情况&#xff0c;可以使用以下方法和命令&#xff1a; 1. 使用 top 运行 top 命令以显示实时的系统性能信息&#xff0c;包括 CPU 和内存使用情况。 top按 q 退出。输出内容包括&#xff1a; CPU 使用率&#xff1a;位于顶部&#xff0c;标…

java中链表的数据结构的理解

在 Java 中&#xff0c;链表是一种常见的数据结构&#xff0c;可以通过类的方式实现自定义链表。以下是关于 Java 中链表的数据结构和实现方式的详细介绍。 1. 自定义链表结构 Java 中链表通常由一个节点类 (ListNode) 和可能的链表操作类构成。 节点类 (ListNode) 这是链表…

结构方程模型(SEM)入门到精通:lavaan VS piecewiseSEM、全局估计/局域估计;潜变量分析、复合变量分析、贝叶斯SEM在生态学领域应用

目录 第一章 夯实基础 R/Rstudio简介及入门 第二章 结构方程模型&#xff08;SEM&#xff09;介绍 第三章 R语言SEM分析入门&#xff1a;lavaan VS piecewiseSEM 第四章 SEM全局估计&#xff08;lavaan&#xff09;在生态学领域高阶应用 第五章 SEM潜变量分析在生态学领域…

2.mybatis整体配置

文章目录 mybatis-config.xml介绍SqlSessionFactoryBuilderXMLConfigBuilderpropertiessetting类型别名&#xff08;typeAliases&#xff09;扫描插件(plugins)解析objectFactory(对象工厂)解析objectWrapperFactory解析reflectorFactorysettingsElement()方法环境配置&#xf…