각 노드에 정수 키가 있는 이진 트리가 있다고 가정합니다. 주어진 값으로 합산되는 경로를 찾아야 합니다. 경로는 루트에서 리프로 시작해야 합니다. 합이 같은 경로를 찾아야 합니다.
트리가 [5,4,8,11,null,13,4,7,2,null,null,5,1]이고 합계가 22이면 -
가 됩니다.

경로는 [[5,4,11,2],[5,8,4,5]]입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- dfs 함수를 사용하여 이 문제를 해결하십시오. dfs가 약간 수정되면 다음과 같이 작동합니다. 이 함수는 루트, 합계 및 하나의 임시 배열을 사용합니다.
- 루트가 없으면 반환
- 루트의 왼쪽과 루트의 오른쪽이 비어 있으면
- 합계 =루트 값이면
- temp에 root 값 삽입, 결과에 temp 삽입, temp에서 마지막 노드 삭제
- 반환
- 합계 =루트 값이면
- temp에 root 값 삽입
- dfs(루트 왼쪽, 합계 – 루트 값, 임시)
- dfs(루트 오른쪽, 합계 – 루트 값, 임시)
- temp에서 마지막 요소 삭제
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int> > v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << "[";
for(int j = 0; j <v[i].size(); j++){
cout << v[i][j] << ", ";
}
cout << "],";
}
cout << "]"<<endl;
}
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int data){
val = data;
left = right = NULL;
}
};
void insert(TreeNode **root, int val){
queue<TreeNode*> q;
q.push(*root);
while(q.size()){
TreeNode *temp = q.front();
q.pop();
if(!temp->left){
if(val != NULL)
temp->left = new TreeNode(val);
else
temp->left = new TreeNode(0);
return;
} else {
q.push(temp->left);
}
if(!temp->right){
if(val != NULL)
temp->right = new TreeNode(val);
else
temp->right = new TreeNode(0);
return;
} else {
q.push(temp->right);
}
}
}
TreeNode *make_tree(vector<int> v){
TreeNode *root = new TreeNode(v[0]);
for(int i = 1; i<v.size(); i++){
insert(&root, v[i]);
}
return root;
}
class Solution {
public:
vector < vector <int> > res;
void dfs(TreeNode* root, int sum, vector <int>& temp){
if(!root)return;
if(!root->left && !root->right){
if(sum == root->val){
temp.push_back(root->val);
res.push_back(temp);
temp.pop_back();
}
return;
}
temp.push_back(root->val);
dfs(root->left, sum - root->val, temp);
dfs(root->right, sum - root->val, temp);
temp.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
res.clear();
vector <int> temp;
dfs(root, sum, temp);
return res;
}
};
main(){
Solution ob;
vector<int> v = {5,4,8,11,NULL,13,4,7,2,NULL,NULL,NULL,NULL,5,1};
TreeNode *root = make_tree(v);
print_vector(ob.pathSum(root, 22));
} 입력
[5,4,8,11,null,13,4,7,2,null,null,5,1] 22
출력
[[5, 4, 11, 2, ],[5, 8, 4, 5, ],]