二叉树中和为某一值的路径 深度递归
二叉树中和为某一值的路径
http://www.nowcoder.com/questionTerminal/b736e784e3e34731af99065031301bca
使用递归调用进行深度遍历,定义了一个全局变量vector<vector<int> >res; 当满足sum==expectNumber&&p->left==NULL&&p->right==NULL这三个条件,则说明是一个正确的路径,将其推入数组中,保存下来。
此处dfs的vector<int>& one使用引用而不是传值,可以节省大量时间和内存,传值在迭代过程中,会复制构造函数,耗时和内存都会加大。</int></int>
class Solution {
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<int> one;
if(root==NULL)return res;
dfs(root,one,0,expectNumber);
return res;
}
void dfs(TreeNode* p,vector<int>& one,int sum,int expectNumber){
sum+=p->val;
one.push_back(p->val);
if(sum==expectNumber&&p->left==NULL&&p->right==NULL){//满足这三个条件,则说明是一个正确的路径,将其推入数组中,保存下来
res.push_back(one);//
one.pop_back();//并弹出当前子节点的值
return;
}
if(p->left)dfs(p->left,one,sum, expectNumber);
if(p->right)dfs(p->right,one,sum, expectNumber);
one.pop_back();//运行到这,说明已经到子节点了,还不满足sum==expectNumber
//就应该将这个子节点的数字弹出去。
}
private:
vector<vector<int> >res;//定义一个全局的变量
};
查看6道真题和解析
