관리 메뉴

FU11M00N

[LeetCode] Kth Smallest Element in a BST - Javascript 본문

알고리즘

[LeetCode] Kth Smallest Element in a BST - Javascript

호IT 2023. 9. 8. 00:24

Kth Smallest Element in a BST

[이진 탐색 트리, k번째로 작은 수 찾기]

제약 조건

The number of nodes in the tree is n.
1 <= k <= n <= 10^4
0 <= Node.val <= 10^4

Example

문제 접근 방식

주어지는 트리가 이진 탐색 트리이고, k가 주어지면 k 번째로 작은 노드를 반환하면 되기에,
중위 순회 방법으로 쉽게 풀 수 있다.

중위 순회는 노드의 가장 왼쪽 - 루트 - 오른쪽 순으로 순회를 하는데,
이진 트리 탐색이기에, 가장 작은 수는 왼쪽부터 있는 특성을 이용해 풀 수 있었다.
먼저 재귀 함수를 만들어 root를 받아 data가 존재하지 않으면 리턴하는 제어문을 작성한다.

이후 노드의 맨 왼쪽부터 접근이 가능하도록 recusive 함수를 재귀 호출한다.
data.left가 존재할 때까지 재귀 호출을 하고 이후 index를 1씩 증가하며,
k와 값이 같은지 비교하고 같을 때 현재 노드의 값을 smallest 변수에 값을 넣고 리턴한다.


이후 data.right도 재귀 호출해 반복하여 값을 찾는다.

 

접근 코드

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthSmallest = function (root, k) {
   let index = 0;
   let smallest;
   const recursive = data => {
      if (!data) {
         return;
      }
      recursive(data.left);
      index++;
      if (index == k) {
         smallest = data.val;
         return;
      }
      recursive(data.right);
   };

   recursive(root);
   return smallest;
};

 

 

Comments