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

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

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

相关推荐

07-09 19:25
门头沟学院 Java
这是要把每一个投校招的都开盒吗?
26届之耻将大局逆转:裁人的时候一次性追回餐费
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务