File tree Expand file tree Collapse file tree 2 files changed +62
-0
lines changed
maximum-depth-of-binary-tree Expand file tree Collapse file tree 2 files changed +62
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for a binary tree node.
3+ * class TreeNode {
4+ * val: number
5+ * left: TreeNode | null
6+ * right: TreeNode | null
7+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+ * this.val = (val===undefined ? 0 : val)
9+ * this.left = (left===undefined ? null : left)
10+ * this.right = (right===undefined ? null : right)
11+ * }
12+ * }
13+ */
14+
15+ /**
16+ * 이진 트리의 최대 깊이를 계산하는 함수
17+ * @param {TreeNode | null } root - 트리의 루트 노드
18+ * @returns {number } - 트리의 최대 깊이 (최상위 루트에서 가장 깊은 리프까지 깊이)
19+ *
20+ * 시간 복잡도: O(n)
21+ * - 모든 노드를 한 번씩 방문하여 깊이를 계산
22+ *
23+ * 공간 복잡도: O(h) (h - 트리의 높이)
24+ */
25+ function maxDepth ( root : TreeNode | null ) : number {
26+ if ( ! root ) return 0 ; // 노드가 없으면 깊이는 0
27+
28+ return Math . max ( maxDepth ( root . left ) , maxDepth ( root . right ) ) + 1 ; // 왼쪽, 오른쪽 서브트리 중 더 깊은 값에 +1
29+ } ;
30+
Original file line number Diff line number Diff line change 1+ /**
2+ * 겹치는 구간(interval)을 병합하는 함수
3+ * @param {number[][] } intervals - 각 구간을 나타내는 2차원 배열 [[start, end], ...]
4+ * @returns {number[][] } - 겹치는 구간을 병합한 결과 배열
5+ *
6+ * 시간 복잡도: O(n log n)
7+ * - 정렬 과정에서 O(n log n), 병합 과정에서 O(n)으로 최종 O(n log n)
8+ *
9+ * 공간 복잡도: O(n)
10+ * - 정렬된 배열을 저장하는 데 O(n), 결과 배열도 O(n)을 차지
11+ */
12+ function merge ( intervals : number [ ] [ ] ) : number [ ] [ ] {
13+ let result : number [ ] [ ] = [ ] ;
14+
15+ // 시작 시간을 기준으로 정렬 (오름차순)
16+ intervals . sort ( ( a , b ) => a [ 0 ] - b [ 0 ] ) ;
17+
18+ for ( let interval of intervals ) {
19+ // 결과 리스트가 비어있거나
20+ // 현재 구간이 이전 구간과 겹치지 않는 경우
21+ if ( result . length === 0 || result [ result . length - 1 ] [ 1 ] < interval [ 0 ] ) {
22+ result . push ( interval ) ; // 새로운 구간 추가
23+ } else {
24+ // 결과 값의 마지막 interval을 기준으로
25+ // 현재 구간이 이전 구간과 겹치는 경우, 두 구간을 병합
26+ result [ result . length - 1 ] [ 1 ] = Math . max ( result [ result . length - 1 ] [ 1 ] , interval [ 1 ] ) ;
27+ }
28+ }
29+
30+ return result ;
31+ }
32+
You can’t perform that action at this time.
0 commit comments