JavaScript로 이진탐색트리 범위 안의 값 모두 더하기

LeetCode 938. Range Sum of BST

Jun
2 min readMay 17, 2020

문제링크

문제분석

Binary Search Tree 의 루트와함께 Range(L, R) 이 함수의 파라미터로 들어올 때, L과 R사이에 포함되어 있는 모든 값을 더해서 리턴하는 함수를 구현하라

돌파구

먼저, 이진탐색트리의 성질을 이용하기 전에, 이진트리의 DFS를 생각 해 본다. 모든 값을 방문해서 현재 노드의 값이 L과 R사이 일 때, 그 값을 더해주기만 하면 된다.

하지만, 함수의 인자로 들어오는 트리가 이진탐색트리 일 때에는, 모든 노드를 다 방문 할 필요가 없다. 범위를 벗어난 노드에 대해서는 탐색 해 줄 필요가 없는 것이다. 이렇게 하면, 탐색에 소요되는 시간과, 재귀호출을 줄여서 메모리 사용을 줄일 수 있다.

구현

결론적으로, DFS를 재귀로 구현한 것에서 발전시키면 되는데, 이 때 필요없는 탐색을 줄이기 위해서 조건문이 필요하다.

  • if(L > node.val) : 현재 노드의 value 가 L 보다 작을 때에는 이 노드의 왼쪽은 항상 현재 노드의 value 보다 작은 값만 있으니까, 더이상 검사 해 줄 필요가 없다. 따라서 dfs(node.right) 오른쪽만 재귀호출 하면된다.
  • if(node.val > R) : 이번에도 마찬가지로 현재 노드의 value 가 R 보다 클 때에는 이노드의 오른쪽은 항상 큰 값만 있으니까, dfs(node.left) 왼쪽에 대해서만 재귀호출을 한다.
  • if(L <= node.val && node.val <=R) : 범위 안에 들어올 때에는, 현재값을 sum 에 더해주고, 왼쪽과 오른쪽에 대해서 더 검사 해 준다. dfs(node.left), dfs(node.right)

--

--

No responses yet