package common;
public class Solution {
public int rangeSumBST(TreeNode root, int low, int high) {
if (root == null) {
return 0;
}
int sum = 0;
if (root.val >= low && root.val <= high) {
sum += root.val;
}
if (root.val > low) {
sum += rangeSumBST(root.left, low, high);
}
if (root.val < high) {
sum += rangeSumBST(root.right, low, high);
}
return sum;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
TreeNode
int val
: 노드의 값을 저장TreeNode left
: 왼쪽 노드 자식TreeNode right
: 오른쪽 노드 자식rangeSumBST
TreeNode 구조를 입력한 root를 직접 살펴보면서 다양한 방향으로 탐색해보았는데, 리프 노드에서 다시 상위로 올라가는 개념을 시도하면서 시간을 많이 소비했다.. 최종적으로는 재귀적으로 하위 리프로 내려가면서 값의 유무를 분석하는 방식으로 문제가 해결되었다. 평상시 재귀라는 개념이 직관적으로 와닿지 않았는데, 이진트리의 트리구조와 재귀라는 개념을 동시에 살펴보면서 좀 더 입체적으로 이해할 수 있어서 좋았다.
이진 탐색 트리에서 특정 요소의 위치를 찾는다.
이진 검색트리에 데이터를 삽입하는 작업을 한다. 새 키는 항상 리프노드에 삽입된다.