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

简介: 剑指 Offer 34:二叉树中和为某一值的路径

题目

题目链接

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

叶子节点 是指没有子节点的节点。

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:

输入:root = [1,2], targetSum = 0
输出:[]

解题

方法一:BFS

class Solution {
public:
    vector<vector<int>> pathSum(TreeNode* root, int target) {
        if(!root) return {};
        vector<vector<int>> res;
        queue<TreeNode*> queueNode;
        queue<int> queueVal;
        queue<vector<int>> queueVec;
        queueNode.push(root);
        queueVal.push(root->val);
        queueVec.push(vector<int>{root->val});
        while(!queueNode.empty()){
            TreeNode* cur=queueNode.front();
            queueNode.pop();
            int val=queueVal.front();
            queueVal.pop();
            vector<int> vec=queueVec.front();
            queueVec.pop();
            if(!(cur->left||cur->right)&&val==target){
                res.push_back(vec);
            }
            if(cur->left){
                queueNode.push(cur->left);
                queueVal.push(val+cur->left->val);
                vec.push_back(cur->left->val);
                queueVec.push(vec);
                vec.pop_back();
            }
            if(cur->right){
                queueNode.push(cur->right);
                queueVal.push(val+cur->right->val);
                vec.push_back(cur->right->val);
                queueVec.push(vec);
                vec.pop_back();
            }
        }
        return res;
    }
};

方法二:回溯

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    void dfs(TreeNode* root,int target){
        if(!root) return;
        path.push_back(root->val);
        target-=root->val;
        if(target==0&&!(root->left||root->right)) res.push_back(path);
        dfs(root->left,target);
        dfs(root->right,target);
        path.pop_back();//回溯
    }
    vector<vector<int>> pathSum(TreeNode* root, int target) {
        dfs(root,target);
        return res;
    }
};


相关文章
|
7月前
剑指 Offer 32:从上到下打印二叉树
剑指 Offer 32:从上到下打印二叉树
43 0
|
7月前
leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II
leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II
76 0
|
7月前
/leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
/leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
38 0
|
7月前
leetcode 剑指 Offer 32 - III. 从上到下打印二叉树 III
leetcode 剑指 Offer 32 - III. 从上到下打印二叉树 III
49 0
力扣 剑指 Offer 32 - III. 从上到下打印二叉树 III
力扣 剑指 Offer 32 - III. 从上到下打印二叉树 III
54 0
力扣 剑指 Offer 32 - I. 从上到下打印二叉树
力扣 剑指 Offer 32 - I. 从上到下打印二叉树
61 0
力扣 剑指 Offer 32 - II. 从上到下打印二叉树 II
力扣 剑指 Offer 32 - II. 从上到下打印二叉树 II
63 0
|
算法
图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径
图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径
70 1
剑指offer_二叉树---二叉树中和为某一值的路径
剑指offer_二叉树---二叉树中和为某一值的路径
81 0
剑指 Offer 28. 对称的二叉树(递归/并且或者要考虑好)
剑指 Offer 28. 对称的二叉树(递归/并且或者要考虑好)