class Solution { public: int FindPath(TreeNode* root, int sum, bool allowBreak) { if (!root) return 0; int count = sum == root->val ? 1 : 0; if (!root->left && !root->right) { return count; } auto left = root->left; if (left) { if (allowBreak) { count += FindPath(left, sum, true); } count += FindPath(left, sum - root->val, false); } auto right = root->right; if (right) { if (allowBreak) { count += FindPath(right, sum, true); } count += FindPath(right, sum - root->val, false); } return count; } int FindPath(TreeNode* root, int sum) { return FindPath(root, sum, true); } };