二叉树中和为某一值的路径 深度递归
二叉树中和为某一值的路径
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;//定义一个全局的变量 };