二叉树中和为某一值的路径 深度递归

二叉树中和为某一值的路径

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;//定义一个全局的变量
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务