[LeetCode] Range Sum of BST

less than 1 minute read

문제정보

어떻게 풀까?

Binaray Search Tree를 순회하여 L, R 범위 안에 있는 값들의 총합을 반환한다.

언제 왼쪽으로, 언제 오른쪽으로 가야할까? 그리고 범위 안에 속해 있을 때는 어떻게 움직여야 할까를 고민한다.

재귀로 푼다.

  • L보다 작을 땐 오른쪽으로
  • R보다 클 땐 왼쪽으로
  • L과 R 사이에 있을 때는 왼쪽, 오른쪽 모두 순회하고 그 결과값에 현재 노드값을 더한다. (중요. 별도로 총합값을 선언하여 조건절로 더하는 것이 아니라 return 하는 부분에 순회하는 부분과 같이 녹일 수 있다.)

다른 방식의 풀이도 있다. 모든 노드를 순회하여 Array에 넣은 뒤 범위 안의 값이 있는지 검사하여 값을 더할 수도 있다. 효율은 좋지 않다.

문제풀이 (JavaScript)

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} L
 * @param {number} R
 * @return {number}
 */
var rangeSumBST = function(root, L, R) {
	if(root == null) return 0;

	if(root.val < L) return rangeSumBST(root.right, L, R);
	else if(root.val > R) return rangeSumBST(root.left, L, R);
	else return root.val + rangeSumBST(root.left, L, R) + rangeSumBST(root.right, L, R);
};

Leave a comment