BST가 주어졌을 때, low와 high 사이에 있는 값들을 모두 더해서 리턴하는 문제다.
class Solution {
public int answer;
public int rangeSumBST(TreeNode root, int low, int high) {
answer = 0;
DFS(root, low, high);
return answer;
}
public void DFS(TreeNode node, int low, int high){
if(node.val >= low && node.val <= high){
answer += node.val;
}
if(node.left == null && node.right == null){
return;
}
if(node.left != null){
DFS(node.left, low, high);
}
if(node.right != null){
DFS(node.right, low, high);
}
}
}
BST는 새로 넣을 노드가 기준이 되는 노드보다 작을 경우 왼쪽에 클 경우 오른쪽에 넣는다. 그러므로 굳이 왼쪽 노드가 존재하면 왼쪽으로 가고 오른쪽 노드가 존재하면 오른쪽으로 가는 것보다 val을 기준으로 val이 low보다 크면 왼쪽으로 움직이고(low가 더 작기 때문에 val의 왼쪽에 있을 것) high보다 작으면 오른쪽으로 움직이는 게(high가 더 크기 때문에 val의 오른쪽에 있을 것) 나을 수도 있다.
class Solution {
public int answer;
public int rangeSumBST(TreeNode root, int low, int high) {
answer = 0;
DFS(root, low, high);
return answer;
}
public void DFS(TreeNode node, int low, int high){
if(node != null){
if(node.val >= low && node.val <= high){
answer += node.val;
}
if(low < node.val){
DFS(node.left, low, high);
}
if(node.val < high){
DFS(node.right, low, high);
}
}
}
}