가장 큰 값부터 거꾸로 방문하며 누적 합(Prefix Sum)을 구하는 방식입니다.
root.right부터 재귀적으로 방문합니다.sum에 현재 노드의 값을 더하고, 현재 노드의 값을 이 sum으로 업데이트합니다.root.left로 이동하여 앞서 구한 sum을 계속 전달하며 업데이트합니다.public class Solution_Leetcode_1038 {
// 현재까지 방문한 노드들의 누적 합을 저장
private int sum = 0;
public TreeNode bstToGst(TreeNode root) {
if (root == null) {
return null;
}
// 1. 오른쪽 서브트리 방문 (가장 큰 값부터 시작)
bstToGst(root.right);
// 2. 현재 노드 처리 및 누적 합 업데이트
sum += root.val;
root.val = sum;
// 3. 왼쪽 서브트리 방문 (나보다 작은 값들 처리)
bstToGst(root.left);
return root;
}
}
Right -> Root -> Left 순회는 내림차순을 보장합니다. 이를 통해 의 정렬 과정 없이 만으로 모든 노드를 적절한 순서로 방문했습니다.sum을 멤버 변수로 선언하여 재귀 호출 간에 상태를 공유하도록 설계했습니다. 이는 별도의 파라미터 전달 없이도 누적 상태를 유지하는 간결한 방식입니다.