AcWing 47. 二叉树中和为某一值的路径(C++)- dfs

题目链接:https://www.acwing.com/problem/content/description/45/
题目如下:
在这里插入图片描述

/**
 * 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>> result;//记录要返回的答案
    vector<int> path;//记录满足条件的一条路径
    vector<vector<int>> findPath(TreeNode* root, int sum) {
    
    
        dfs(root,0,sum);
        return result;
    }
    
    void dfs(TreeNode* root,int sum,int target){
    
    
        if(root==NULL) return ;
        path.push_back(root->val);//先把当前的点存下来
        sum+=root->val;
        
        if(root->left==NULL&&root->right==NULL){
    
    //当前节点为叶子节点,则将路径放入result中
            if(sum==target) result.push_back(path);//如果是叶子节点但是不满足target的条件,则不放入,继续走,直到删除,回退回去
        }else {
    
    //当前节点不是叶子节点
            if(root->left) dfs(root->left,sum,target);
            if(root->right) dfs(root->right,sum,target);
        }
        
        path.pop_back();//把当前的点删掉,即恢复现场,方便走其他路径
    }
};

おすすめ

転載: blog.csdn.net/qq_40467670/article/details/121311192