LeetCode_113. 경로 총 2

2071 단어 LeetCode 문제
113. 경로 총 II
두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다.
설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다.
예: 다음과 같은 두 갈래 트리와 목표 및sum = 22 ,
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1

반환:
[
   [5,4,11,2],
   [5,8,4,5]
]

문제 해결 방법:
 
문제 해결 코드:
일.
class Solution {
public:
	vector tmp;
	vector> result;
	vector> path(TreeNode* root, int sum, vector tmp) {
		if (root == NULL)
			return{};
		tmp.push_back(root->val);
		if (root->val == sum && root->left == NULL && root->right == NULL) {
			result.push_back(tmp);
			return result;
		}
		else if (root->left == NULL && root->right == NULL) {
			return result;
		}
		path(root->left, sum - root->val, tmp);
		path(root->right, sum - root->val, tmp);
		return result;
	}
	vector> pathSum(TreeNode* root, int sum) {
		vector> result = path(root, sum, tmp);
		return result;
	}
};

2. 더 나은 해법
class Solution {
public:
    vector> res;
    vector> pathSum(TreeNode* root, int sum) {
        vector curr;
        dfs(root,curr,0,sum);
        return res;
    }
    
    void dfs(TreeNode* root, vector& curr, int sum, int target){
        if(!root) return;
        if(!root->left && !root->right && root->val+sum == target){
            curr.push_back(root->val);
            res.push_back(curr);
            curr.pop_back();
        }
        curr.push_back(root->val);
        dfs(root->left,curr,sum+root->val,target);
        dfs(root->right,curr,sum+root->val,target);
        curr.pop_back();
    }
};

좋은 웹페이지 즐겨찾기