二叉树中和为某一值的路径(三)

描述

  给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。

  1. 该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点
  2. 总节点数目为n
  3. 保证最后返回的路径个数在整形范围内(即路径个数小于231-1)

数据范围:

0 <= n <= 1000

-109<= 节点值 <= 109

  假如二叉树root为{1,2,3,4,5,4,3,#,#,-1},sum=6,那么总共如下所示,有3条路径符合要求

示例1

输入:
{1,2,3,4,5,4,3,#,#,-1},6
返回值:
3
说明:
如图所示,有3条路径符合

示例2

输入:
{0,1},1
返回值:
2

示例3

输入:
{1,#,2,#,3},3
返回值:
2

思路/解法

方式一

将每一层的数据存入一个一维数组中,当进入下一层的时候,上一层的数据要累加到当前下一层中,以此反复重复进行判断。

/*** struct TreeNode {*  int val;*  struct TreeNode *left;*  struct TreeNode *right;*  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/
class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @param sum int整型* @return int整型*/void GetDepth(TreeNode* node,vector<int> arr,int& res,int sum){if(node == nullptr)return;vector<int> newArr;newArr.push_back(node->val);for(int i=0;i<arr.size();i++)newArr.push_back(arr[i]+node->val);for(int j = 0;j<newArr.size();j++)if(newArr[j] == sum)res++;GetDepth(node->left, newArr, res, sum);GetDepth(node->right, newArr, res, sum);}int FindPath(TreeNode* root, int sum) {int res = 0;vector<int> arr;GetDepth(root, arr, res, sum);return res;}
};

方式二

使用一种特殊的方式进行遍历二叉树,思想为:一开始找到最左边的子树,判断当前是否有满足条件的数,没有则回退一次(到当前子树的父节点位置),往右子树继续深度查找,找到最底部判断是否有满足条件的数。之后回退,由于左右子树都已经查找过,此时应该强行回退到上一个父节点。循环反复。

/*** struct TreeNode {*  int val;*  struct TreeNode *left;*  struct TreeNode *right;*  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/
class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @param sum int整型* @return int整型*/int FindPath(TreeNode* root, int sum) {if (root == nullptr)return 0;stack<TreeNode*> stacks;vector<int> arr;int res = 0;while (root || !stacks.empty()) {while (root) {for (int i = 0; i < arr.size(); i++)arr[i] = arr[i] + root->val;arr.push_back(root->val);for (int i = 0; i < arr.size(); i++)if (arr[i] == sum)res++;stacks.push(root);root = root->left ? root->left : root->right;}root = stacks.top();stacks.pop();//回退arr.pop_back();for (int i = 0; i < arr.size(); i++)arr[i] = arr[i] - root->val;if (!stacks.empty() && stacks.top()->left == root)root = stacks.top()->right;elseroot = nullptr;}return res;}
};

二叉树中和为某一值的路径(三)(C++)相关推荐

  1. 剑指offer:面试题34. 二叉树中和为某一值的路径

    题目:二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和  ...

  2. 《剑指offer》— JavaScript(24)二叉树中和为某一值的路径

    二叉树中和为某一值的路径 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 思路 前序遍历二叉树, ...

  3. 《剑指offer》-- 从上往下打印二叉树、二叉搜素树的后序遍历、二叉树中和为某一值的路径、二叉树与双向链表

    一.从上往下打印二叉树: 1.题目: 上往下打印出二叉树的每个节点,同层节点从左至右打印. 2.解题思路: 用arraylist模拟一个队列来存储相应的TreeNode. 3.代码实现: public ...

  4. 剑指 Offer 34. 二叉树中和为某一值的路径【附完整可运行代码】

    立志用最少的代码做最高效的表达 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和 ...

  5. C#刷剑指Offer | 二叉树中和为某一值的路径

    [C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第292篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...

  6. 数据结构与算法-- 二叉树中和为某一值的路径

    二叉树中和为某一值的路径 题目:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为给定值的所有路径.从树的根节点开始往下一只到叶子节点所经过的节点形成一条路径. 我们用二叉树节点的定义沿用之前文章中 ...

  7. 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径

    [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...

  8. 【重点】剑指offer——面试题25:二叉树中和为某一值的路径

    剑指offer--面试题25:二叉树中和为某一值的路径 参考网址:https://www.nowcoder.com/profile/5488508/codeBookDetail?submissionI ...

  9. 【LRD,DLR】BST的后续遍历序列,二叉树中和为某一值的路径

    D是Degree,后续遍历就是LRD,前序遍历就是DLR. 面试题33:BST的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false. ...

  10. 【剑指offer-Java版】25二叉树中和为某一值的路径

    二叉树中值和为某一值的路径:类似图的深度优先遍历 对于此类问题一直有点弱,多想几次就OK了–主要是不熟悉,毕竟代码写出来之后一看就明白,但是自己想的时候还是有点困难 public class _Q25 ...

最新文章

  1. 洛谷P1198 [JSOI2008]最大数
  2. Day08- team、iptables、firewall
  3. 字符集不同导致的ORA-00972
  4. Oracle IO问题解析(一)
  5. Easy AR初级开发教程
  6. html tooltips效果,html5tooltips.js – 一款轻量级的3D工具提示插件
  7. 三、【React-Router6】重定向 Navigate
  8. ffmpeg连接rtsp流提示Connection refused
  9. Vine已死,秒拍抱团崛起,同是视频社交差距在哪?
  10. 世纪佳缘财务及运营数据分析
  11. mac字体能用在linux吗,mac的字体和win通用吗
  12. 毛玻璃效果在Android的实现
  13. Android游戏源码合集(主要是AndEngine和Libgdx的)
  14. MySQL LIMIT 理解
  15. 2018数字化首席营销官峰会暨华鹰奖颁奖典礼即将召开
  16. reactos操作系统实现(47)
  17. C语言封顶,喜封金顶 | 蓝天·尚东区 -C区封顶大吉 , 美好盛启!
  18. 2017面向对象程序设计(Java)第十一周学习总结
  19. excel 两组数据交点_如何在百万级的数据里找到别人正在赚钱的项目
  20. 计算机毕业论文选题推荐|软件工程|系列十

热门文章

  1. pytorch RNN原理实现词性判别以及预测下一个词
  2. 一鸣在群里质疑摸鱼,聊聊字节的工作文化
  3. 论文赏析【EMNLP19】语言模型效果不好?也许你可以给它添加一点句法信息
  4. Python——numpy排序 求和
  5. Datawhale数据挖掘项目之task2
  6. OLAP(On-line Analytical Processing,联机分析处理)
  7. Vmware安装red hat linux及VMware tools
  8. C/C++集成开发环境搭建
  9. Ubuntu 下如何查看已安装软件版本
  10. 冒泡、选择、插入、希尔、归并、快速排序、排序的稳定性、测试算法时间消耗