[刷题] 437 Paths Sum III

要求

  • 给出一棵二叉树及一个数字sum,判断这棵二叉树上存在多少条路径,其路径上的所有节点和为sum
  • 路径不一定始于根节点,终止于叶子节点
  • 路径要一直向下

思路

  • 分情况讨论:根节点在路径上(8) / 根节点不在路径上(9-10)
  • 递归嵌套递归

实现

 1 class Solution {
 2 public:
 3     int pathSum(TreeNode* root, int sum) {
 4         
 5         if( root == NULL )
 6             return 0;
 7         
 8         int res = findPath( root , sum );
 9         res += pathSum( root->left , sum );
10         res += pathSum( root->right , sum );
11         
12         return res;
13     }
14     
15 private:
16     // 根节点在路径上 
17     int findPath( TreeNode* node, int num ){
18         
19         if( node == NULL )
20             return 0;
21         
22         int res = 0;
23         if( node->val == num )
24             res += 1;
25         
26         res += findPath( node->left , num - node->val );
27         res += findPath( node->right , num - node->val );
28         
29         return res;
30         
31     }
32 };
View Code

 

posted @ 2020-04-12 10:26  cxc1357  阅读(104)  评论(0编辑  收藏  举报