[剑指オファー] JT24 ---二分木が特定の値に中和するパス(約束してください、あきらめないで、ツリーを実行するだけです)

トピックは次のとおりです

ここに画像の説明を挿入します

使用するC ++キーワード

#define DString std::string    //! 不建议使用!

typedef std::string TString;   //! 使用typedef的方式

using Ustring = std::string;   //!使用 using typeName_self = stdtypename;

アイデアとコード

そのパスと特定の値へのトピック、それから見るために実行されたすべてのパスはその上の値と等しくありませんああ
ここで注意することですバックトラック、つまり、path.pop_back();
は、記録されたパスが単一のブランチであることを保証します。

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
    
    
public:
    using vvi=vector<vector<int>>;
    using vi=vector<int>;
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
    
    
        vi path;
        vvi ret;
        if(!root) 
            return ret;
        dfs(root,expectNumber,path,ret);
        return ret;
    }
    void dfs(TreeNode *root,int sum,vi &path,vvi &ret){
    
    
        path.push_back(root->val);
        if(sum==root->val&&!root->left&&!root->right){
    
    
            ret.push_back(path);
        }
        if(root->left) dfs(root->left,sum-root->val,path,ret);
        if(root->right) dfs(root->right,sum-root->val,path,ret);
        path.pop_back();
        return ;
    }
};

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_42136832/article/details/114625504