File tree Expand file tree Collapse file tree 4 files changed +175
-0
lines changed
binary-tree-maximum-path-sum
maximum-depth-of-binary-tree Expand file tree Collapse file 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