File tree 4 files changed +175
-0
lines changed
binary-tree-maximum-path-sum
maximum-depth-of-binary-tree 4 files changed +175
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time complexity: O(n)
2
+ // Space complexity: O(n)
3
+
4
+ /**
5
+ * Definition for a binary tree node.
6
+ * function TreeNode(val, left, right) {
7
+ * this.val = (val===undefined ? 0 : val)
8
+ * this.left = (left===undefined ? null : left)
9
+ * this.right = (right===undefined ? null : right)
10
+ * }
11
+ */
12
+ /**
13
+ * @param {TreeNode } root
14
+ * @return {number }
15
+ */
16
+ var maxPathSum = function ( root ) {
17
+ let answer = Number . MIN_SAFE_INTEGER ;
18
+
19
+ const dfs = ( current ) => {
20
+ const candidates = [ current . val ] ;
21
+
22
+ if ( current . left ) {
23
+ dfs ( current . left ) ;
24
+ candidates . push ( current . left . val + current . val ) ;
25
+ }
26
+
27
+ if ( current . right ) {
28
+ dfs ( current . right ) ;
29
+ candidates . push ( current . right . val + current . val ) ;
30
+ }
31
+
32
+ // 현재 노드가 루트일 경우
33
+ if ( current . left && current . right ) {
34
+ answer = Math . max (
35
+ answer ,
36
+ current . left . val + current . right . val + current . val
37
+ ) ;
38
+ }
39
+
40
+ current . val = Math . max ( ...candidates ) ;
41
+ answer = Math . max ( answer , current . val ) ;
42
+ } ;
43
+
44
+ dfs ( root ) ;
45
+
46
+ return answer ;
47
+ } ;
Original file line number Diff line number Diff line change
1
+ // Time complexity: O(n)
2
+ // Space complexity: O(n)
3
+
4
+ /**
5
+ * Definition for a binary tree node.
6
+ * function TreeNode(val, left, right) {
7
+ * this.val = (val===undefined ? 0 : val)
8
+ * this.left = (left===undefined ? null : left)
9
+ * this.right = (right===undefined ? null : right)
10
+ * }
11
+ */
12
+ /**
13
+ * @param {TreeNode } root
14
+ * @return {number }
15
+ */
16
+ var maxDepth = function ( root ) {
17
+ let answer = 0 ;
18
+
19
+ const dfs = ( current , depth ) => {
20
+ if ( ! current ) {
21
+ return ;
22
+ }
23
+
24
+ if ( answer < depth ) {
25
+ answer = depth ;
26
+ }
27
+
28
+ if ( current . left ) {
29
+ dfs ( current . left , depth + 1 ) ;
30
+ }
31
+
32
+ if ( current . right ) {
33
+ dfs ( current . right , depth + 1 ) ;
34
+ }
35
+ } ;
36
+
37
+ dfs ( root , 1 ) ;
38
+ return answer ;
39
+ } ;
Original file line number Diff line number Diff line change
1
+ // Time complexity: O(nlogn)
2
+ // Space complexity: O(n)
3
+
4
+ /**
5
+ * @param {number[][] } intervals
6
+ * @return {number[][] }
7
+ */
8
+ var merge = function ( intervals ) {
9
+ intervals . sort ( ( a , b ) => {
10
+ if ( a [ 0 ] === b [ 0 ] ) {
11
+ return a [ 1 ] - b [ 1 ] ;
12
+ }
13
+
14
+ return a [ 0 ] - b [ 0 ] ;
15
+ } ) ;
16
+
17
+ const answer = [ intervals [ 0 ] ] ;
18
+
19
+ for ( let i = 1 ; i < intervals . length ; i ++ ) {
20
+ const current = intervals . at ( i ) ;
21
+ const prev = answer . at ( - 1 ) ;
22
+
23
+ // No overlapping
24
+ if ( current [ 0 ] > prev [ 1 ] ) {
25
+ answer . push ( current ) ;
26
+ continue ;
27
+ }
28
+
29
+ answer [ answer . length - 1 ] = [ prev [ 0 ] , Math . max ( prev [ 1 ] , current [ 1 ] ) ] ;
30
+ }
31
+
32
+ return answer ;
33
+ } ;
Original file line number Diff line number Diff line change
1
+ // Time complexity: O(n)
2
+ // Space complexity: O(1)
3
+
4
+ /**
5
+ * Definition for singly-linked list.
6
+ * function ListNode(val, next) {
7
+ * this.val = (val===undefined ? 0 : val)
8
+ * this.next = (next===undefined ? null : next)
9
+ * }
10
+ */
11
+ /**
12
+ * @param {ListNode } head
13
+ * @return {void } Do not return anything, modify head in-place instead.
14
+ */
15
+ var reorderList = function ( head ) {
16
+ // middle 찾기
17
+ let slow = head ;
18
+ let fast = slow ;
19
+
20
+ while ( fast && fast . next ) {
21
+ fast = fast . next . next ;
22
+ slow = slow . next ;
23
+ }
24
+
25
+ const middle = slow ;
26
+
27
+ // 후반부 뒤집기 (middle 부터)
28
+ let next = null ;
29
+ let current = middle ;
30
+
31
+ while ( current ) {
32
+ const temp = current . next ;
33
+ current . next = next ;
34
+ next = current ;
35
+ current = temp ;
36
+ }
37
+
38
+ // 합치기
39
+ let back = next ;
40
+ let reordered = head ;
41
+
42
+ while ( reordered && back ) {
43
+ const temp = reordered . next ;
44
+
45
+ reordered . next = back ;
46
+ back = back . next ;
47
+ reordered = reordered . next ;
48
+
49
+ reordered . next = temp ;
50
+ reordered = reordered . next ;
51
+ }
52
+
53
+ if ( reordered ) {
54
+ reordered . next = null ;
55
+ }
56
+ } ;
You can’t perform that action at this time.
0 commit comments