要求
- 给出一棵二叉树及一个数字sum,判断这棵二叉树上存在多少条路径,其路径上的所有节点和为sum
- 路径不一定始于根节点,终止于叶子节点
- 路径要一直向下
思路
- 分情况讨论:根节点在路径上(8) / 根节点不在路径上(9-10)
- 递归嵌套递归
实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 };