算法描述:
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
Note: A leaf is a node with no children.
Example:
Given the below binary tree and sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
Return:
[ [5,4,11,2], [5,8,4,5] ]
解题思路:回溯法。注意确认边界条件。
vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> results; vector<int> temp; backtracking(root, results, temp, sum); return results; } void backtracking(TreeNode* root, vector<vector<int>>& results, vector<int>& temp, int sum){ if(root==nullptr) return; temp.push_back(root->val); if(sum ==root->val && root->left==nullptr && root->right==nullptr){ results.push_back(temp); } backtracking(root->left, results, temp, sum-root->val); backtracking(root->right, results, temp, sum-root->val); temp.pop_back(); }