이진탐색트리와 2가지 정수형을 주고 그 사이의 값들을 포함해 더하라는 문제다.
이진탐색트리가 어떻게 만들어지는지에 대해 먼저 생각을 했다.
주어진 root = [10,5,15,3,7,null,18], low=7, high = 15 을 가지고 차근히 만들어 본다.
이 과정을 통해 예시의 그림과 같은
트리를 만들 수 있다.
그렇다면 low값을 찾기 위해선 (4)의 과정을 거쳐야 하고 high값을 찾기 위해선 (3)의 과정을 거쳐야 한다. 그에 따른 코드를 짜보았다.
var rangeSumBST = function(root, low, high) {
if (root === null) {
return 0;
}
let result = 0;
// 왼쪽 서브트리 탐색
if (root.val > low) {
result += rangeSumBST(root.left, low, high);
}
// 오른쪽 서브트리 탐색
if (root.val < high) {
result += rangeSumBST(root.right, low, high);
}
// 현재 노드의 값이 범위 내에 있으면 더함
if (root.val >= low && root.val <= high) {
result += root.val;
}
return result;
};
정말 오랜만에 만난 이진탐색트리라서 가물가물했으나 무사히 떠올려서 풀 수 있었다.