要求路径可以从任何位置开始
void checkPath(int sum,vector<TreeNode*> result,vector<vector<TreeNode*>>& results ){
vector<TreeNode*> resultTemp;
for(int i = result.size()-1;i>=0;i--){
sum -= result.at(i)->val;
resultTemp.insert(resultTemp.begin(),result.at(i));
if (sum == 0)
results.push_back(resultTemp);
}
}
void findsum(TreeNode* root, int sum,vector<TreeNode*> result,vector<vector<TreeNode*>>& results){
if (root == NULL)
return;
result.push_back(root);
findsum(root->left,sum,result,results);
checkPath(sum,result,results);
findsum(root->right,sum,result,results);
}
vector<vector<TreeNode*>> findsum(TreeNode* root, int sum){
vector<TreeNode*> result;
vector<vector<TreeNode*>> results;
if (root == NULL)
return results;
findsum(root,sum,result,results);
return results;
}
1. 为了减少search次数,打算从叶子节点开始search。也就是把“寻找从某一点开始的路径”转化为“以某一点为结束的路径”。
2. 在recursive实现方法,还是参考了书。原本思路:从下到上搜索,一条路径搜索结束后,跳到上一个点。
问题:如果实现从下到上搜索,没有指向parent的指针。如果用recursive实现,有如何能实现跳上另一个点。
解决办法:用内存存储从root到改点的路径信息,然后就可以一个个相加了!!!!!