题目描述:
二叉树的路径和
给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值
的路径。
一个有效的路径,指的是从根节点到叶节点的路径。
给定一个二叉树,和 目标值 = 5
:
1
/ \
2 4
/ \
2 3
返回:
[
[1, 2, 2],
[1, 4]
]
遍历二叉树,然后用一维数组记录从根节点到叶子节点的路径,然后将每条路径上节点值的和已知的比较,如果相等,将此数组添加另一个数组就行了。
实现代码:
class Solution {
public:
/**
* @param root the root of binary tree
* @param target an integer
* @return all valid paths
*/
vector<vector<int>> binaryTreePathSum(TreeNode *root, int target) {
// Write your code here
vector<vector<int> > paths;
vector<int> path;
if(root==NULL) return paths;
else {
sum(root,path,paths,target);
return paths;
}
}
void sum(TreeNode *root,vector<int> p,vector<vector<int> >&q ,int target)
{ p.push_back(root->val);
vector<int>::iterator itp;
if(root->left==NULL&&root->right==NULL)
{
int n=0;
for(itp=p.begin();itp!=p.end();itp++)
{
n=n+*itp;
}
if(n==target){
q.push_back(p);
}
}
if(root->left!=NULL) sum(root->left,p,q,target);
if(root->right!=NULL) sum(root->right,p,q,target);
}
};
感想:这题首先得分清局部变量和全局变量,思路能想到,就是在处理细节的时候,局部变量与全局变量要搞清楚!