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

刷题之路径总和Ⅲ(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;
}

相关文章:

  • nginx文件解析漏洞测试
  • Python基于PyQt6制作GUI界面——按钮
  • MongoDB CRUD操作:内嵌文档查询
  • 前端基础入门三大核心之HTML篇 —— SVG的viewBox、width和height:绘制矢量图的魔法比例尺【含代码示例】
  • 【C++】STL快速入门基础
  • 基于Docker部署GitLab环境搭建
  • 使用JSON_EXTRACT匹配某个json类型字段中的某个具体字段
  • Java集合框架详解:深入探讨Java中的集合框架
  • 【栈】Leetcode 71. 简化路径【中等】
  • 美团Java社招面试题真题,最新面试题
  • Srping 历史
  • ROS学习笔记(16):夹缝循迹
  • 类 和 对象(二)
  • 分享10个国内可以使用的GPT中文网站
  • 工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • [译]前端离线指南(上)
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • canvas 绘制双线技巧
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • es6要点
  • fetch 从初识到应用
  • gitlab-ci配置详解(一)
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • input实现文字超出省略号功能
  • JS函数式编程 数组部分风格 ES6版
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Redis学习笔记 - pipline(流水线、管道)
  • SQLServer之创建显式事务
  • 关于extract.autodesk.io的一些说明
  • 记一次删除Git记录中的大文件的过程
  • 简单基于spring的redis配置(单机和集群模式)
  • 讲清楚之javascript作用域
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 类orAPI - 收藏集 - 掘金
  • 如何优雅地使用 Sublime Text
  • 深入 Nginx 之配置篇
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 世界上最简单的无等待算法(getAndIncrement)
  • 线性表及其算法(java实现)
  • 怎么把视频里的音乐提取出来
  • 自定义函数
  • ​configparser --- 配置文件解析器​
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • # dbt source dbt source freshness命令详解
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (三)docker:Dockerfile构建容器运行jar包
  • (三)终结任务
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)母版页和相对路径