作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

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

1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点

2.叶子节点是指没有子节点的节点

3.路径只能从父节点到子节点,不能从子节点到父节点

4.总节点数目为n
例如:
给出如下的二叉树,sum=22,

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

数据范围:

1.树上的节点数满足0≤n≤10000

2.每 个节点的值都满足∣val∣≤1000

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

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

示例1:

输入:

{5,4,8,1,11,#,9,#,#,2,7},22

返回值:

true

示例2: 

输入:

{1,2},0

返回值:

false

解题思路:

本题考察数据结构树的使用,可运用stack栈后入先出的特性解题。

1)将根节点放入栈进入循环。

2)获取根节点的值,并弹出根节点,当左子树存在时,将左子树的数值叠加根节点的数值,并将左子树放入栈,右子树同理。

3)从栈顶取出节点,该节点应该是上一轮的右子树,以其为该轮的根,继续扫描其左右子树,若有则继续存入栈内。

4)当栈为空时,说明所有的结点都遍历过了,无结果则返回false。

5)当某一轮根结点的值与目标值一致且左右子树均无,则说明该节点是叶子节点,且符合要求,返回true完成。

该逻辑类似于前序遍历,无非是将过程中每个节点的值替换为对应路径值的和。

测试代码:

/*** 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) {stack<TreeNode*> t;if(!root)return false;t.push(root);TreeNode* current;while(!t.empty()){current=t.top();t.pop();if(current->left){current->left->val+=current->val;t.push(current->left);}if(current->right){current->right->val+=current->val;t.push(current->right);}if(current->val==sum&&!current->left&&!current->right)return true;}return false;}
};

剑指offer(C++)-JZ82:二叉树中和为某一值的路径(一)(数据结构-树)相关推荐

  1. 剑指offer 25: 二叉树中和为某一值的路径

    题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  2. 《剑指offer》NO34 二叉树中和为某一值的路径 详解 <Java实现>

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

  3. 剑指offer(C++)-JZ34:二叉树中和为某一值的路径(二)(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值 ...

  4. 剑指offer(C++)-JZ33:二叉搜索树的后序遍历序列(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回 tru ...

  5. 小黑天寒地冻来到平谷蹭饭,抽几分钟的leetcode之旅:剑指 Offer II 045. 二叉树最底层最左边的值

    小黑代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, r ...

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

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

  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. 剑指 Offer 34. 二叉树中和为某一值的路径【附完整可运行代码】

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

最新文章

  1. 贼好用的 Java 工具类库
  2. C#正则提取HTML中img的url值
  3. asp.net url重写相关技术问题整理
  4. 替换某个目录下的文本文件内容字符串
  5. Designing GANs:又一个GAN生产车间
  6. 数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(举例说明)
  7. js时间工具 MyTimeUtil.js
  8. java world_Java World中的GraphQL简介
  9. 如何用业余时间成为抢手的数据人才?
  10. python列表乘数值_《利用Python进行数据分析》十一章· 时间序列·学习笔记(一)...
  11. 通信原理眼图画法_光纤通信链路入侵与检测技术研究综述
  12. esri-leaflet入门教程(2)-地图的HelloWorld
  13. CEF3中js调用delphi内部方法
  14. ASP.net:URL重写实现IHttpHandler接口
  15. react 中加载静态word文档(或加载静态的html文件)
  16. HTTP长连接和短连接
  17. 哈哈哈哈,IT总监VS美发总监
  18. 2022 年中回顾|一文看懂预训练模型最新进展
  19. 前端自学Vue笔记干货(第一版,持续更新中~~~)
  20. Littlefs移植,FLASH用的是W25Q32

热门文章

  1. PDF转换技巧之如何把文件转换为WPS?
  2. iOS9使用提示框的正确实现方式(UIAlertView is deprecated)
  3. jsp引用带参数的js文件,例如 script src=a.js?ctxpath=${base
  4. 不用POI技术,JAVA给Word文档中的数据区域赋值
  5. CStatic控件的基本使用
  6. 分享20佳移动应用程序开发框架
  7. 21.为什么要用swagger,它解决了什么问题?
  8. 某音爆火,人物头像动漫化,为女朋友打造独一无二的头像【python实战:人物图片动漫化】
  9. halcon 差异模型 异物_基于HALCON的形状匹配算法的研究和心得总结
  10. fasterrcnn论文_【论文解读】Yolo三部曲解读——Yolov1