题目
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For 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] ]
翻译
给定一个二叉树和一个和,找到所有根到叶的路径,其中每个路径的和等于给定的和。
分析
题目要求求出所有路径结果。在求出左子树满足结果时,不能return,而是继续求右子树。
每到一个叶子节点判断是否满足结果,如果满足添加路径集合paths中,如果不能满足结果,把该节点从路径path中删除。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> ret; void buildPath(TreeNode* root,int sum,vector<int> &path,vector<vector<int>> &paths){ if(root==NULL) return; path.push_back(root->val); int cur = sum - root->val; if(!(root->left)&&!(root->right)&&root->val==sum) paths.push_back(path); if(root->left){ buildPath(root->left,cur,path,paths); path.pop_back(); } if(root->right){ buildPath(root->right,cur,path,paths); path.pop_back(); } } vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<int> path; vector<vector<int>> paths; if(root==NULL) return paths; buildPath(root,sum,path,paths); return paths; } };