[low, high] 범위에 포함되는 모든 노드의 합을 구합니다.Left < Root < Right의 정렬된 구조를 가집니다. 이 속성을 이용하면 특정 범위 밖의 서브트리는 탐색에서 아예 배제할 수 있습니다.전체 트리를 모두 뒤지는 대신, 현재 노드의 값(root.val)을 기준으로 탐색 범위를 좁힙니다.
low보다 작은 경우: 왼쪽 서브트리는 볼 필요가 없습니다. 더 큰 값들이 있는 오른쪽만 확인합니다.high보다 큰 경우: 오른쪽 서브트리는 볼 필요가 없습니다. 더 작은 값들이 있는 왼쪽만 확인합니다.public class Solution_Leetcode_938 {
public int rangeSumBST(TreeNode root, int low, int high) {
// 기저 사례: 노드가 없으면 0 반환
if (root == null) {
return 0;
}
// 1. 현재 노드 값이 low보다 작으면, 오른쪽만 탐색 (가지치기)
if (root.val < low) {
return rangeSumBST(root.right, low, high);
}
// 2. 현재 노드 값이 high보다 크면, 왼쪽만 탐색 (가지치기)
if (root.val > high) {
return rangeSumBST(root.left, low, high);
}
// 3. 범위 내에 있다면 현재 값 + 좌우 탐색 결과 합산
return root.val
+ rangeSumBST(root.left, low, high)
+ rangeSumBST(root.right, low, high);
}
}