题目:
给一棵二叉树,找出从根节点到叶子节点的所有路径。
给出下面这棵二叉树:
1
/ \
2 3
\
5
所有根到叶子的路径为:
[
"1->2->5",
"1->3"
]
思路:这个和后边那个二叉树的所有路径稍有不同,就是在找出路径里节点和判断是否等于target,如果等于就将这个路径插入到ss中。
代码:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
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>> ss;
vector<int>s;
//vector<int>t;
if(root==NULL) return ss;
//s[0]=root->val;
s.push_back(root->val);
all(root,ss,s,target);
return ss;
}
void all(TreeNode *root,vector<vector<int>>&ss,vector<int>s,int target){
vector<int>t;
if(root->left==NULL&&root->right==NULL){
int k=0;
for(int i=0;i<=s.size()-1;i++)
{ k=k+s[i];
}
if(k==target)
{ss.push_back(s);}
return;
}
t=s;
if(root->left!=NULL)
{s.push_back(root->left->val);all(root->left,ss,s,target);}
if(root->right!=NULL)
{t.push_back(root->right->val);all(root->right,ss,t,target);}
}
};
感想:我完成之后总是run time error,后来才想起来这个错误出现的原因,就把s[0]=root->val;改成了s.push_back(root->val);还有第41行,必须要先改变s,才能执行后面的,而不能将这两个容在一块。