多一些Aha Time,发现技术的美妙🍺|

啊原来是这样呀

园龄:8年3个月粉丝:3关注:9

【剑指offer】27.二叉树中和为某一值的路径(三)

总目录:

算法之旅导航目录

 

1.问题描述

给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。
1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点
2.总节点数目为n
3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)
数据范围:
0<=n<=1000
−10^9<=节点值<=10^9
假如二叉树root为{1,2,3,4,5,4,3,#,#,-1},sum=6,那么总共如下所示,有3条路径符合要求

 

 

 

 

2.问题分析

 1递归,使用二叉树的遍历(如前、中、后序任选),将遍历到的节点作为根节点,统计以该节点为起点有多少条路径符合要求

2哈希表法,暂未看懂
3.代码实例

递归

复制代码
 1 /**
 2  * struct TreeNode {
 3  *  int val;
 4  *  struct TreeNode *left;
 5  *  struct TreeNode *right;
 6  *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 7  * };
 8  */
 9 class Solution {
10   public:
11     /**
12      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
13      *
14      *
15      * @param root TreeNode类
16      * @param sum int整型
17      * @return int整型
18      */
19     int pathSum = 0;
20     void recurve(TreeNode* root, int tgtSum) {
21         if (!root) {
22             return;
23         }
24 
25         if (root->val == tgtSum) {
26             pathSum++;
27         }
28 
29         recurve(root->left, tgtSum - root->val);
30         recurve(root->right, tgtSum - root->val);
31     }
32 
33     int FindPath(TreeNode* root, int sum) {
34         if (!root) {
35             return pathSum;
36         }
37 
38         //前序遍历
39         recurve(root, sum);
40         FindPath(root->left, sum);
41         FindPath(root->right, sum);
42 
43         return pathSum;
44     }
45 };
View Code
复制代码

 

本文作者:啊原来是这样呀

本文链接:https://www.cnblogs.com/OhOfCourse/p/16886558.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   啊原来是这样呀  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起