【 LeetCode 】剑指 Offer 34. 二叉树中和为某一值的路径 (中等) dfs回溯

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

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

[
   [5,4,11,2],
   [5,8,4,5]
]

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<vector<int>> ans; //答案
    vector<int> t; //过程

    void dfs(int s,TreeNode* root, int sum)
    {
    
    
        if(root->left==NULL && root->right==NULL) //叶子
        {
    
    
            if(s==sum) //和为sum
            {
    
    
                ans.push_back(t);
                return;
            }
        }

        if(root->left) //左树存在
        {
    
    
            t.push_back(root->left->val);
            dfs(s+root->left->val,root->left,sum); //累加左树的值
            t.pop_back(); //回溯
        }

        if(root->right) //右树存在
        {
    
    
            t.push_back(root->right->val);
            dfs(s+root->right->val,root->right,sum); //累加右树的值
            t.pop_back(); //回溯
        }

    }

    vector<vector<int>> pathSum(TreeNode* root, int sum) {
    
    
        if(root==NULL) return ans; //树为空
        t.push_back(root->val); //先加入根的值
        dfs(root->val,root,sum); 
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_45260385/article/details/108477114
今日推荐