刷题之路径总和Ⅲ(leetcode)

路径总和Ⅲ
在这里插入图片描述
这题和和《为K的数组》思路一致,也是用前缀表。
代码调试过,所以还加一部分用前序遍历数组和中序遍历数组构造二叉树的代码。

#include<vector>
#include<unordered_map>
#include<iostream>
using namespace std;
//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 {
private:
    unordered_map<long long, int>map;
    int dfs(TreeNode* root, long long cur, int targetSum)
    {
        if (root == NULL)
        {
            return 0;
        }
        int count = 0;
        cur += root->val;
        if (map.find(cur - targetSum) != map.end())
        {
            count += map[cur - targetSum];
        }
        map[cur]++;
        int leftcount = dfs(root->left, cur, targetSum);
        int rightcount = dfs(root->right, cur, targetSum);
        map[cur]--;//因为路径总和只是针对同一个头结点,所以不是同一个头结点时需要回溯
        return count + leftcount + rightcount;
    }
public:
    int pathSum(TreeNode* root, int targetSum) {
        map[0] = 1;
        return dfs(root, 0, targetSum);
    }
};

class tree {
private:
    TreeNode* build(vector<int>& preorder, vector<int>& inorder)
    {
        if (preorder.size() == 0)
            return NULL;
        //找到根节点
        int rootvalue = preorder[0];
        TreeNode* root = new TreeNode(rootvalue);
        //叶子节点
        if (preorder.size() == 1)
            return root;
        //区分左右子树位置
        int index = 0;
        for (int i = 0; i < inorder.size(); i++)
        {
            if (inorder[i] == rootvalue)
            {
                index = i;
                break;
            }
        }
        vector<int>left_in(inorder.begin(), inorder.begin() + index);
        vector<int>right_in(inorder.begin() + index + 1, inorder.end());
        vector<int>left_pre(preorder.begin() + 1, preorder.begin() + 1 + left_in.size());
        vector<int>right_pre(preorder.begin() + 1 + left_in.size(), preorder.end());
        root->left = build(left_pre, left_in);
        root->right = build(right_pre, right_in);
        return root;
    }
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return build(preorder, inorder);
    }
};

int main()
{
    vector<int>inorder = {3,3,-2,5,2,1,10,-3,11};
    vector<int>preorder = { 10,5,3,3,-2,2,1,-3,11 };
    int targetsum = 8;
    tree mytree;
    TreeNode* root = mytree.buildTree(preorder,inorder);
    Solution solution;
    int result = solution.pathSum(root, targetsum);
    cout << result << endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HCIE是什么证书?为什么要考?

每当我发一些关于HCIE的话题时&#xff0c;总有小伙伴过来问“啥是HCIE啊&#xff1f;”今天就一起来了解下&#xff0c;到底什么是HCIE&#xff1f;为什么这么多人都要考HCIE? HCIE是华为认证ICT专家的缩写&#xff0c;它是华为认证体系中最高级别的ICT技术认证。HCIE全称为H…

JUnit5禁用测试用例

什么是禁用测试用例&#xff1a; 给用例添加禁用标识被禁用的用例执行后会添加跳过的状态可以禁用测试类、也可以禁用测试方法 使用场景&#xff1a; 在bug未解决之前&#xff0c;对应的测试用例则无需执行版本更新&#xff0c;某些用例暂时不可以 Disable注解&#xff1a;…

【Andoird开发】android获取蓝牙权限,搜索蓝牙设备MAC

<!-- Android 12以下才需要定位权限&#xff0c; Android 9以下官方建议申请ACCESS_COARSE_LOCATION --><uses-permission android:name"android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name"android.permission.ACCES…

可视化 | Seaborn中的矩阵图及示例

Seaborn是python提供的一个很棒的可视化库。它有几种类型的绘图&#xff0c;通过这些绘图&#xff0c;它提供了惊人的可视化能力。其中一些包括计数图&#xff0c;散点图&#xff0c;配对图&#xff0c;回归图&#xff0c;矩阵图等等。本文讨论了Seaborn中的矩阵图。 示例1&am…

微软密谋超级AI大模型!LangChain带你轻松玩转大模型开发

此前&#xff0c;据相关媒体报道&#xff0c;微软正在研发一款名为MAI-1的最新AI大模型&#xff0c;其参数规模或将达5000亿以上&#xff0c;远超此前微软推出的相关开源模型&#xff0c;其性能或能与谷歌的Gemini 1.5、Anthropic的Claude 3和OpenAI的GPT-4等知名大模型相匹敌。…

AI PC 的曙光:微软大胆出击与苹果竞争

AI PC 的曙光&#xff1a;微软大胆出击与苹果竞争 AI PC 的曙光&#xff1a;微软大胆出击与苹果竞争 概述 微软已正式进入 AI PC 时代&#xff0c;并且毫不避讳地直接向苹果的 MacBook 发起攻击。随着代号为“Copilot”的笔记本电脑的推出&#xff0c;微软准备彻底改变我们与…

vue 表格表头展示不下,显示。。。;鼠标悬浮展示全部

vue 表格表头展示不下&#xff0c;显示。。。&#xff1b;鼠标悬浮展示全部 <templateslot-scope"scope"slot"header"><span:title"临时证券类型"style"white-space:nowrap">{{ 临时证券类型 }}</span></templa…

01_尚硅谷JavaWeb最新版笔记

尚硅谷JAVAWEB概述 课程概述 计划学习时间&#xff1a;1周以内

动物合并消除休闲游戏源码 Animal Merge 益智游戏

一款动物合并消除休闲游戏源码&#xff0c;Animal Merge是一款引人入胜的益智游戏&#xff0c;玩家的任务是合并方块&#xff0c;创造出可爱的动物&#xff0c;这些动物的体型会逐渐变大。游戏玩法包括将方块放到网格上&#xff0c;并战略性地将它们合并以形成更大的动物形状。…

vscode远程操作虚拟机Ubuntus上的某个目录

每次打开vscode时候&#xff0c;默认就开始链接最近一次登录的目录&#xff0c;让你输入登录密码&#xff0c;如果此时不想远程登录&#xff0c;那么&#xff0c;可以按esc退出登录连接&#xff0c;这样就会弹出关闭远程登录窗口&#xff0c;点击关闭即可 FR&#xff1a;徐海涛…

PostgreSQL基础(二):PostgreSQL的安装与配置

文章目录 PostgreSQL的安装与配置 一、PostgreSQL的安装 二、PostgreSQL的配置 1、远程连接配置

组网智能是啥?

组网智能是一种基于穿透技术的远程连接解决方案&#xff0c;它为用户提供了操作简单、跨平台应用、无网络要求和独创的安全加速方案等优势。由于这些特点&#xff0c;组网智能已经被几十万用户广泛应用&#xff0c;解决了各行业客户的远程连接需求。 跨平台应用 组网智能具备跨…

电脑键盘如何练习盲打?

电脑键盘如何练习盲打&#xff1f;盲打很简单&#xff0c;跟着我做&#xff0c;今天教会你。 请看【图1】&#xff1a; 【图1】中&#xff0c;红色方框就是8个基准键位&#xff0c;打字时我们左右手的8个手指就是放在这8个基准键位上&#xff0c;F键和J键上各有一个小突起&…

02. Flink 快速上手

02. Flink 快速上手 1、创建项目导入依赖 pom文件&#xff1a; <properties><flink.version>1.17.0</flink.version> </properties><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java<…

Spring Boot 中缓存的用法

缓存&#xff08;Caching&#xff09;是提升应用性能的重要手段之一&#xff0c;通过减少不必要的数据计算和数据库访问&#xff0c;显著提高系统的响应速度。在 Spring Boot 中&#xff0c;缓存机制被集成得非常好&#xff0c;使得我们能够快速、方便地使用缓存功能。本文将介…

python-pytorch 下批量seq2seq+Bahdanau Attention实现问答1.0.000

python-pytorch 下批量seq2seq+Bahdanau Attention实现简单问答1.0.000 前言原理看图数据准备分词、index2word、word2index、vocab_size输入模型的数据构造注意力模型decoder的编写关于损失函数和优化器在预测时完整代码参考前言 前面实现了 luong的dot 、general、concat注意…

CCF20230901——坐标变换(其一)

CCF20230901——坐标变换&#xff08;其一&#xff09; #include<bits/stdc.h> using namespace std; int main() {int n,m,x[101],y[101],x1[101],y1[101];cin>>n>>m;for(int i0;i<n;i)cin>>x1[i]>>y1[i];for(int j0;j<m;j)cin>>x[…

【活动】开源与闭源大模型:探索未来趋势的双轨道路

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 开源与闭源大模型&#xff1a;探索未来趋势的双轨道路引言一、开源大模型&#…

数据库缓存 buffer pool详解

什么是buffer pool buffer pool, 又称之缓存池, 是mysql中为了提升查询性能而引入的缓存, 如果每次查询和修改都去操作磁盘的话, 性能就会很差, 从而引入 Buffer Pool包含多个缓冲页&#xff08;默认大小通常为16KB&#xff09;&#xff0c;每个缓冲页都有对应的控制信息&#…

【TB作品】stm32单片机读取DS2401程序

DS2401是由Analog Devices公司生产的一种硅序列号芯片&#xff0c;它提供了一个绝对唯一的64位ROM识别码&#xff0c;用于确保可追溯性。以下是对DS2401器件的分析&#xff1a; 特点和优势&#xff1a; 唯一性&#xff1a;每个DS2401芯片都有一个独一无二的64位注册码&#x…