每日两题 / 437. 路径总和 III 105. 从前序与中序遍历序列构造二叉树(LeetCode热题100)

437. 路径总和 III - 力扣(LeetCode)
image.png

前序遍历时,维护当前路径(根节点开始)的路径和,同时记录路径上每个节点的路径和
假设当前路径和为cur,那么ans += 路径和(cur - target)的出现次数

/*** 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:unordered_map<long long, int> mp;long long ans = 0;long long t;void dfs(TreeNode *root, long long &cur) {if (root == nullptr) return;cur += root->val;ans += mp[cur - t] ;mp[cur] ++ ;dfs(root->left, cur);dfs(root->right, cur);mp[cur] -- ;cur -= root->val;}int pathSum(TreeNode* root, int targetSum) {mp[0] ++ ;t = targetSum;long long cur = 0;dfs(root, cur);return ans;}
};

105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)
image.png

递归构造,每次构造子树的根节点
根节点的左右子节点如何构造?根据中序遍历中,根节点的位置确定左右子树节点数量
在前序遍历中,分别确定左右子树节点的范围,两者的第一个节点就是根节点的左右节点

/*** 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:unordered_map<int, int> mp;TreeNode* dfs(vector<int> &preorder, vector<int> &inorder, int l, int r, int ll, int rr) {if (l > r) return nullptr;TreeNode *root = new TreeNode(preorder[l]);int iidx = mp[preorder[l]];int sz = iidx - ll;root->left = dfs(preorder, inorder, l + 1, l + sz, ll, iidx - 1);root->right = dfs(preorder, inorder, l + sz + 1, r, iidx + 1, rr);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int n = preorder.size();for (int i = 0; i < inorder.size(); ++ i)mp[inorder[i]] = i;return dfs(preorder, inorder, 0, n - 1, 0, n - 1);}
};

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

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

相关文章

fastjson_1.2.24和Shiro(CVE-2016-4437)漏洞复现

文章目录 一、fastjson 1.2.24远程命令执行漏洞复现二、shiro反序列化漏洞(CVE-2016-4437)1、Shiro漏洞原理2、手工验证漏洞3、使用ShiroAttack2 一、fastjson 1.2.24远程命令执行漏洞复现 配置环境&#xff1a;本机java 8环境 kali操作系统&#xff08;java8&#xff09; c…

webapi路由寻址机制

路由匹配的原则 1、启动 Application_Start 文件夹中有个WebApiConfig 会把路由规则写入一个容器 2、客户端请求时&#xff1a; 请求会去容器匹配&#xff0c;先找到控制器&#xff08;找到满足的&#xff0c;就转下一步了&#xff09;&#xff0c;然后找Action&#xff0c;we…

被动防护不如主动出击

自网络的诞生以来&#xff0c;攻击威胁事件不断涌现&#xff0c;网络攻防对抗已然成为信息时代背景下的一场无硝烟的战争。然而&#xff0c;传统的网络防御技术&#xff0c;如防火墙和入侵检测技术&#xff0c;往往局限于一种被动的敌暗我明的防御模式&#xff0c;面对攻击者无…

第四届辽宁省大学生程序设计竞赛

比赛经历&#xff1a;2024.5.14简单vp了一个小时只写出了签到题4个然后跑路了 补题&#xff1a;感觉其他题有点太抽象了主要补了一题&#xff0c;在区间问题中数据结构的使用 比赛链接[点我即可] 目录 A.欢迎来到辽宁省赛 B.胜率 F.隔板与水槽 H.取石子 L.区间与绝对值 …

NMACDR:基于邻居交互增强和多头注意力机制的跨域推荐模型

基于邻居交互增强和多头注意力机制的跨域推荐模型 湖北民族大学学报-孙克雷、汪盈盈-2023 思路 针对基于映射的跨域推荐模型没有充分关注源域中数据稀疏的用户,导致用户偏好的迁移效率降低的问题,提出本文。 首先,利用邻居用户的交互来增强源域中数据稀疏用户的交互序列,…

RS422一主多从MAX3490

RS422一主多从MAX3490 最近项目用到了RS422一主多从&#xff0c;一个主机4个从机。芯片用的MAX3490&#xff0c;几经折腾&#xff0c;最终只能从一拖4改为一拖2。 主机发送端&#xff0c;从机4个接收端都是正常的&#xff0c;没有问题。波形非常完美&#xff0c;没有太大变形 …

回溯算法(Backtracking Algorithm)

回溯算法&#xff08;Backtracking Algorithm&#xff09;是一种试探性的解决问题方法&#xff0c;主要用于解决约束满足问题。这类问题通常存在多个可能的解&#xff0c;且解的空间可以被形式化地表示出来。回溯算法通过逐步构造候选解并检验其合法性的方式来探索解空间&#…

2024制造行业面临的数字挑战

1、市场环境变化频繁 受国际关系、疫情爆发等意外事件影响&#xff0c;需求端和供应端都充满了不确定性&#xff0c;数据信息的传递和透明就显得尤为重要。 2、产能原料浪费严重 过程管控和数据传递的缺失和不及时导致工厂生产现场异常频发&#xff0c;质量水平低下以及生产产…

uni-segmented-control插件使用

dcloud插件市场 前端/uniapp 1.HBuildX打开目标项目 2.进入dcloud插件市场下载目标插件 3.看到如下提示(已经可以在目标项目中使用插件啦) 4.项目正式使用

分享一些人生道理,希望能对大家有所帮助!

1. 别总想出风头&#xff0c;炫耀就是深渊&#xff0c;贪心就是毁灭&#xff0c;人性的恶一旦被激发&#xff0c;后果不堪设想。 2. 戒取怨之言&#xff1a;不要说招人怨恨的话&#xff0c;播下使人怨恨的种子。 3. 学会感恩&#xff0c;因为感恩能够让你更加幸福。 4. 玉碎不能…

自动驾驶占据感知的综述:信息融合视角

24年5月香港理工的论文“A Survey on Occupancy Perception for Autonomous Driving: The Information Fusion Perspective“。 3D 占据感知技术旨在观察和理解自动驾驶车辆的密集 3D 环境。该技术凭借其全面的感知能力&#xff0c;正在成为自动驾驶感知系统的发展趋势&#x…

JSPfilters过滤技术

1.创建动态web项目 2.创建filters的文件 3.创建主页面 4.配置xml项目 总结构 主页面代码 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><!DOCTYPE html><html><head><meta cha…

linux系统配置之单一网卡配置多个不同网段IP(centos)

linux系统配置之单一网卡配置多个不同网段IP&#xff08;centos&#xff09; 1、用root权限的用户登录CENTOS&#xff0c;进入network-scripts文件夹下&#xff08;本步骤可以省略&#xff0c;与二步骤一起完成&#xff09;&#xff1a; shell命令&#xff1a;cd /ect/syscon…

力扣刷题--数组--第五天

昨天做了几道关于双指针求解的算法题&#xff0c;今天继续看相关的题目。 844. 比较含退格的字符串 给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。   注意&#xff1a;如果对空…

idea2023.3.2版本全局设置maven地址

idea每次新建项目都默认使用了一个user目录下的地址&#xff0c;而不是自己安装的maven地址&#xff0c;每次创建项目后&#xff0c;都要重新从settings中设置一下maven地址。 可以全局修改&#xff1a;首先在File-->Close Project回到idea最开始的界面 然后在Customize里点…

C++语法|深入理解 new 、delete

在开发过程中&#xff0c;非常重要的语法就有我们new和delete&#xff0c;周所周知在C中最为强大的能力就是对内存的控制&#xff0c;所以我们再怎么强调new和delete都不为过 文章目录 1.new和delete基本语法new和malloc的区别是什么&#xff1f;(1)开辟单个元素的内存差别(2)开…

火遍全网的“当当狸智能激光雕刻机L1” 让创意梦想分分钟实现

当当狸首款“桌面级”智能激光雕刻机来袭&#xff0c;千万别错过。 龙年伊始&#xff0c;当当狸就迎来了新品首发——智能激光雕刻机L1。 话不多说&#xff0c;赶快来看~~ 当当狸这款智能激光雕刻机造型美观&#xff0c;设计时尚&#xff0c;堪称激光雕刻机界的颜值天花板~~ …

类型的转换

首先我们要了解java中的数据类型转换是指将一种数据类型转换成另一种数据类型的过程。 什么时候会用到&#xff1f;我觉得两种情况会用到 等号左右两边类型不一致&#xff08;一般发生在赋值时&#xff09;不同类型的数据参与运算&#xff08;一般发生在计算时&#xff09; 转…

C函数总结

perror&#xff08;s&#xff09; 头文件&#xff1a;stdio.h功能&#xff1a;将函数发生错误的原因打印到标准设备&#xff08;stderr&#xff09;&#xff0c;参数s所指的字符串会先打印出&#xff0c;后面加上错误原因。 realloc 头文件&#xff1a;stdlib.h功能&#xf…

空降领导生存指南

1、有真本事&#xff0c;亲自解决棘手的问题。 2、善待部下 3、创造价值 4、找大老板帮忙站台&#xff0c;吃饭&#xff0c;开会 5、开始找两个行业深度知识开会&#xff0c;培训&#xff0c;比如EMC… 6、软着陆&#xff0c;观察业务了解人。刚到新单位不要马上定标准&#xf…