二刷代码随想录第16天

embedded/2024/11/29 23:03:51/

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.ppmy.cn/embedded/141594.html

相关文章

ubuntu 安装proxychains

在Ubuntu上安装Proxychains&#xff0c;你可以按照以下步骤操作&#xff1a; 1、更新列表 sudo apt-update 2、安装Proxychains sudo apt-get install proxychains 3、安装完成后&#xff0c;你可以通过编辑/etc/proxychains.conf文件来配置代理规则 以下是一个简单的配置示例&…

信息技术与数据安全:打造高效、安全的数据处理系统

信息技术与数据安全&#xff1a;打造高效、安全的数据处理系统 在当今这个信息化高速发展的时代&#xff0c;数据已成为企业运营和决策的核心资源。随着大数据、云计算、人工智能等信息技术的飞速发展&#xff0c;数据处理能力得到了前所未有的提升&#xff0c;但同时也对数据…

git的使用(简洁版)

什么是 Git&#xff1f; Git 是一个分布式版本控制系统 (DVCS)&#xff0c;用于跟踪文件的更改并协调多人之间的工作。它由 Linus Torvalds 在 2005 年创建&#xff0c;最初是为了管理 Linux 内核的开发。Git 的主要目标是提供高效、易用的版本控制工具&#xff0c;使得开发者…

reactivex.Observable 超时问题

下面代码测试可知&#xff1a;超时设置需要在map之后才有效&#xff0c;换句话说就是&#xff0c;超时只对超时设置之前的代码有用 import io.reactivex.Observable; import java.util.concurrent.TimeUnit;public class TimeoutTest {public static void main(String[] args…

网络安全——SpringBoot配置文件明文加密

一、前言 在日常开发中&#xff0c;项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件 中。 如果这些信息以明文的方式存储&#xff0c;你的电脑被拿去修理&#xff0c;就会容易泄露&#xff0c;一旦被其他人获取到…

JVM:即时编译器,C2 Compiler,堆外内存排查

1&#xff0c;即时编译器 1.1&#xff0c;基本概念 常见的编译型语言如C&#xff0c;通常会把代码直接编译成CPU所能理解的机器码来运行。而Java为了实现“一次编译&#xff0c;处处运行”的特性&#xff0c;把编译的过程分成两部分&#xff0c;首先它会先由javac编译成通用的…

如何利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响?

原文&#xff1a;如何利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响&#xff1f;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247630247&idx8&sn2debedc63a42cfd24ed4c8afbb8c575d&chksmfa8dbc40cdfa3556dc0ec660d00fcd7e8c9a9ca75a8…

泷羽sec-基础之html 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…