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

描述

给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。

  1. 该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
  2. 叶子节点是指没有子节点的节点
  3. 路径只能从父节点到子节点,不能从子节点到父节点
  4. 总节点数目为n

例如:
给出如下的二叉树,sum=22,

返回true,因为存在一条路径 5\to 4\to 11\to 25→4→11→2的节点值之和为 22

数据范围:

  1. 树上的节点数满足 0≤n≤10000
  2. 每个节点的值都满足

要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)

进阶:空间复杂度 O(树的高度)O(树的高度),时间复杂度 O(n)O(n)

示例1

输入:
{5,4,8,1,11,#,9,#,#,2,7},22
返回值:
true

示例2

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

示例3

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

解题思想

  1. 通过dfs算法(即深度优先搜索算法)遍历。
  2. 通过bfs算法(即广度优先搜索算法)遍历。

TIPS:仅仅只是遍历方案不同,都能达到相同的目的。

dfs算法(深度优先搜索算法)源代码

/*** struct TreeNode {*  int val;*  struct TreeNode *left;*  struct TreeNode *right;* };*/class Solution {public:/**** @param root TreeNode类* @param sum int整型* @return bool布尔型*/bool hasPathSum(TreeNode* root, int sum) {if (root == nullptr)return false;TreeNode* node;stack<TreeNode*> sta;stack<int> curSum;sta.push(root);curSum.push(root->val);int curRest;while (!sta.empty()) {node = sta.top();sta.pop();curRest = curSum.top();curSum.pop();if (curRest == sum && node->left == nullptr && node->right == nullptr)return true;if (node->left) {sta.push(node->left);curSum.push(curRest + node->left->val);}if (node->right) {sta.push(node->right);curSum.push(curRest + node->right->val);}}return false;}
};

bfs算法(广度优先搜索算法)源代码

/*** struct TreeNode {*  int val;*  struct TreeNode *left;*  struct TreeNode *right;* };*/class Solution {public:/**** @param root TreeNode类* @param sum int整型* @return bool布尔型*/bool hasPathSum(TreeNode* root, int sum) {if (root == nullptr)return false;TreeNode* node;queue<TreeNode*> que;queue<int> curSum;que.push(root);int curRest = 0;curSum.push(root->val);while (!que.empty()) {node = que.front();que.pop();curRest = curSum.front();curSum.pop();if (curRest == sum && node->left == nullptr && node->right == nullptr)return true;if (node->left){que.push(node->left);curSum.push(curRest+node->left->val);}if (node->right){que.push(node->right);curSum.push(curRest+node->right->val);}}return false;}
};

二叉树中和为某一值的路径(一)(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. (转)开发心得分享:10年编程无师自通
  2. Axure中的原型如何导出成为HTML5源码
  3. UA MATH565C 随机微分方程III Ito积分的构造
  4. nyoj-37 回文字符串
  5. java实现驾校考试系统_jsp驾校考试系统
  6. oracle经典面试题以及解答
  7. ueditor1.4.3 jsp版在ssh下的配置
  8. Oracle.start with … connect by [… and] prior…order siblings by …
  9. html中列表怎么平移,css如何设置图片平移
  10. 京东运营 不错的帖子
  11. 1分钟让别人喜欢你(二)
  12. 编程中无穷大的设定 很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1 但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相
  13. 汇编:汇编的基本介绍
  14. 关于邮件中的encoded-word的解析
  15. ldd3学习之七:中断处理
  16. video 在安卓版本上小窗口播放,IOS 微信 video小屏幕播放,微信全屏video
  17. Linux【学习心得】深入剖析软件的源码安装
  18. ubuntu14.04命令大全
  19. 使用神经网络训练iris数据集 —— Python数据工程No.7
  20. 详解红黑树之左旋右旋

热门文章

  1. 【NLP】Dive into BERT:语言模型与知识
  2. 【干货】PyTorch Tricks 集锦
  3. 一段平平无奇的秋招经历
  4. bug6-_SymbolicException: Inputs to eager execution function cannot be Keras symbolic
  5. python--split方法
  6. 数据分析师如何正确地提意见?
  7. AI公开课丨ASER:基于高阶选择偏好的常识知识图谱
  8. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)
  9. 博文视点大讲堂第29期——2天玩转单反相机
  10. 梦幻一场——关于《梦断代码》