[剑指 Offer]二叉树中和为某一值的路径

    技术2022-07-16  86

    [剑指 Offer]二叉树中和为某一值的路径

    剑指 Offer-二叉树中和为某一值的路径

    题目描述

    输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。

    示例:

    给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 返回: [ [5,4,11,2], [5,8,4,5] ]

    提示: 节点总数 <= 10000

    解题思路
    假设根节点值为root,从根节点开始找和为sum的路径,可以理解为,从根的左子树开始找和为sum-root的路径,以及从根的右子树开始找和为sum-root的路径。嗯,又是递归。
    实现代码
    class Solution { public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> res; vector<int> list; nextpathSum(root,sum,res,list); return res; } void nextpathSum(TreeNode* root,int sum,vector<vector<int>>& res,vector<int>& list){ if(root==NULL) return; list.push_back(root->val); if(root->val==sum&&root->left==NULL&&root->right==NULL)//符合条件的路径 res.push_back(list); vector<int> rlist=list; //因为参数是传地址,所以左子树找完后找右子树的时候,list里是有值的 nextpathSum(root->left,sum-root->val,res,list);//左子树开始找和为sum-root->val的路径 nextpathSum(root->right,sum-root->val,res,rlist);//右子树开始找和为sum-root->val的路径 } };
    Processed: 0.018, SQL: 9