剑指offer-JZ82 二叉树中和为某一值的路径(一)(附区分DFS和回溯)
描述
给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。
1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
2.叶子节点是指没有子节点的节点
3.路径只能从父节点到子节点,不能从子节点到父节点
4.总节点数目为n
例如:
给出如下的二叉树,\ sum=22 sum=22,
返回true,因为存在一条路径 5\to 4\to 11\to 25→4→11→2的节点值之和为 22
思路:
这个题给我的启发是:DFS回溯和递归到底怎么区分!?
不回头的是递归,回头的(有反悔语句的)是DFS回溯,DFS回溯得标好起终点和”map“。
我的代码是先序遍历,可以看到now代表现在的长度,但是它没有返回,now每次进了函数就是只加不减,所以应该是借鉴了DFS思想的先序遍历(递归)。
注释掉的代码是其他人的题解,那是正宗的递归求解。大致思路都是now代表现在的路数,sum是总路数,到叶子节点,同时now==sum的时候,说明找到了这样的一条路,返回true,否则返回false,用now加可以,sum逐个减也可以。
/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/class Solution {
public:/*** * @param root TreeNode类 * @param sum int整型 * @return bool布尔型*//*//递归求解,当root为空返回false,当到达叶子节点,并且和位sum返回true
//其他情况递归调用左右子树
class Solution {
public:bool hasPathSum(TreeNode *root, int sum) {if(root == NULL)return false;if(root->left == NULL && root->right == NULL && sum - root->val == 0)return true;return hasPathSum(root->left,sum-root->val) || hasPathSum(root->right,sum-root->val);}
};
*/bool hasPathSum(TreeNode* root, int sum) {// write code hereif(!root)return false; return find(root,sum,0);}bool find(TreeNode* root, int sum,int now){if(!root)return false;else{now+=root->val;if(!root->left&&!root->right&&now==sum)return true;return find(root->left, sum, now)||find(root->right,sum,now);}}
};
剑指offer-JZ82 二叉树中和为某一值的路径(一)(附区分DFS和回溯)相关推荐
- 剑指 Offer 34. 二叉树中和为某一值的路径【附完整可运行代码】
立志用最少的代码做最高效的表达 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和 ...
- 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径
[LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...
- 113. 路径总和 (剑指 Offer 34. 二叉树中和为某一值的路径)(回溯算法)
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径. 叶子节点 是指没有子节点的节点. 示例 1: 输入:root = [ ...
- 剑指offer:二叉树中和为某一值的路径
题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 分析:路径定义为从树的根结点开始往下一直到叶结点 ...
- 小黑除夕跟尚香吃喜茶喝火锅,走了一下午,晚上休息会儿顺便的leetcode之旅:剑指 Offer 34. 二叉树中和为某一值的路径
小黑代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, r ...
- 剑指offe题解(二叉树中和为某一值的路径)
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...
- 剑指Offer之二叉树中的和为某一路径的值
题目 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数 ...
- C#刷剑指Offer | 二叉树中和为某一值的路径
[C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第292篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...
- 【重点】剑指offer——面试题25:二叉树中和为某一值的路径
剑指offer--面试题25:二叉树中和为某一值的路径 参考网址:https://www.nowcoder.com/profile/5488508/codeBookDetail?submissionI ...
- 剑指offer:面试题34. 二叉树中和为某一值的路径
题目:二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和 ...
最新文章
- python 模拟登陆智联_Python+scrapy爬虫之模拟登陆
- 关于烂代码的那些事——什么是好代码
- et操作 python wps_拿起来就用的office二次开发(python,win32com使用经历总结)
- 密码可逆不可逆选择_膝关节损伤不可逆!跑步要注意!
- java代码读取properties配置文件实例
- exchange无法收发邮件_MAPI session超过Exchange最大限制,邮件发送失败的终极解决方法...
- Open Cube 时信魔方介绍
- python海龟交易源码_海龟交易系统的Python完全版 | RiceQuant米筐量化社区 交易策略论坛...
- Javaweb项目 SMBMS 超市订单管理系统:准备工作、登录与注销、修改密码、用户管理
- 某代理网站免费IP地址抓取测试
- git报 “The stash entry is kept in case you need it again“ 错误解析
- flask peewee教程
- Japanese(Shift-Jis)的编码范围
- 3分钟教你图解Bitmap编码传输
- 汽车专场 | 新能源汽车动力电池PACK CAE分析实例解读
- 三星4k3d电视测试软件,说出来你可能不信:3D、4K、曲面电视慎重购买
- 《剑指offer》75题 C++详细题解
- 淘宝店铺商品发布API(新)接口,店铺上传接口代码对接教程
- 不懂带团队,你就自己累!教你如何成为顶尖管理者!
- PCL点云学习 十二(RoPs 特征与惯性矩描述子)