【剑指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

 

posted @ 2022-11-13 18:30  啊原来是这样呀  阅读(23)  评论(0编辑  收藏  举报