1234567891011121314151617181920212223
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3 2 11 / \ \3 -2 1返回 3。和等于 8 的路径有:1. 5 -> 32. 5 -> 2 -> 13. -3 -> 11
12345678910111213141516171819202122232425262728293031323334353637383940414243
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */class Solution {public: int count = 0; //定义一个全局变量 int pathSum(TreeNode* root, int targetSum) { if (root == nullptr) return 0; dfs(root, targetSum); //以root为起始点查找路径 pathSum(root->left,targetSum); //左子树递归 pathSum(root->right,targetSum); //右子树递归 return count; } //递归求解 void dfs(TreeNode* curr, int target) { if (curr != nullptr) { target -= curr->val; if (target == 0) count++; dfs(curr->left,target); dfs(curr->right,target); } } };