주어진 이진 트리에서 모든 오른쪽 잎의 합을 찾아야 하는 이진 트리가 있다고 가정합니다.
따라서 입력이 다음과 같으면

이진 트리에 두 개의 오른쪽 잎이 있고 값이 각각 7과 10이기 때문에 출력은 17이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
dfs() 함수를 정의하면 노드, 추가,
가 필요합니다. -
노드가 null이면 -
-
반환
-
-
노드의 왼쪽이 null이고 노드의 오른쪽이 null이고 add가 0이 아닌 경우 -
-
ret :=ret + 노드의 val
-
-
dfs(노드 왼쪽, 거짓)
-
dfs(노드 오른쪽, 참)
-
기본 방법에서 다음을 수행하십시오 -
-
ret :=0
-
dfs(루트, 참)
-
리턴 렛
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int data){
val = data;
left = NULL;
right = NULL;
}
};
class Solution {
public:
int ret = 0;
void dfs(TreeNode* node, bool add){
if(!node)
return ;
if(!node−>left && !node->right && add){
ret += node−>val;
}
dfs(node−>left, false);
dfs(node−>right, true);
}
int solve(TreeNode* root) {
ret = 0;
dfs(root, true);
return ret;
}
};
main(){
Solution ob;
TreeNode *root = new TreeNode(3);
root−>left = new TreeNode(9);
root−>right = new TreeNode(10);
root−>left−>left = new TreeNode(15);
root−>left−>right = new TreeNode(7);
cout << (ob.solve(root));
} 입력
TreeNode *root = new TreeNode(3); root−>left = new TreeNode(9); root−>right = new TreeNode(10); root−>left−>left = new TreeNode(15); root−>left−>right = new TreeNode(7);
출력
17