@@ -10,17 +10,63 @@ class TreeNode {
10
10
* @return {number }
11
11
*/
12
12
const getMinimumDifference = ( root ) => {
13
- // console.log(Infinity - 1)
14
- // console.log(1 - Infinity)
15
- let queue = [ root ] , list = [ ] ;
16
- while ( queue . length > 0 ) {
17
- let curr = queue . shift ( ) , left = curr . left , right = curr . right ;
18
- list . push ( curr . val ) ;
19
- if ( null !== left ) queue . push ( left ) ;
20
- if ( null !== right ) queue . push ( right ) ;
13
+ let list = [ ] , visitedList = [ ] ;
14
+ // while (queue.length > 0) {
15
+ // let curr = queue.shift(), left = curr.left, right = curr.right;
16
+ // list.push(curr.val);
17
+ // if (null !== left) queue.push(left);
18
+ // if (null !== right) queue.push(right);
19
+ // }
20
+
21
+ // TODO: Study actually how to do a preorder i think my solution is not the best here
22
+ const inOrder = ( node ) => {
23
+ console . log ( `node.val:` ) ;
24
+ console . log ( node )
25
+ console . log ( "list" ) ;
26
+ console . log ( list ) ;
27
+ // console.log(visitedList);
28
+
29
+ if ( null === node ) {
30
+ // visitedList.pop(); // current
31
+ let parent = visitedList . pop ( ) ;
32
+ if ( undefined === parent ) return ;
33
+ // console.log("visitedList");
34
+ // console.log(visitedList);
35
+ // console.log("parent");
36
+ // console.log(parent);
37
+
38
+ list . push ( parent . val ) ;
39
+ parent . left = null ;
40
+ return inOrder ( parent . right ) ;
41
+ } else {
42
+ visitedList . push ( node ) ;
43
+ return inOrder ( node . left ) ;
44
+ }
45
+ // else {
46
+ // // else if (null === node.right) {
47
+ // // list.push(node.val);
48
+ // // let parent = visitedList.pop();
49
+ // // parent.left == null;
50
+ // // return inOrder(parent);
51
+ // // } else if (null !== node.left) {
52
+ // // visitedList.push(node);
53
+ // // return inOrder(node.left);
54
+ // // } else if (null !== node.right) {
55
+ // // visitedList.push(node);
56
+ // // return inOrder(node.right);
57
+ // // }
58
+ // }
59
+ // return inOrder();
21
60
}
22
61
23
- let min = Infinity , tmpMax = 0 , tmpMin = Infinity ;
62
+ inOrder ( root ) ;
63
+
64
+ console . log ( visitedList ) ;
65
+ console . log ( "list" ) ;
66
+ console . log ( list ) ;
67
+
68
+
69
+ // let min = Infinity, tmpMax = 0, tmpMin = Infinity;
24
70
// for (let i = 0; i < list.length; i++) {
25
71
// tmpMax = Math.max(tmpMax, list[i]);
26
72
// tmpMin = Math.min(tmpMin, list[i]);
@@ -29,18 +75,26 @@ const getMinimumDifference = (root) => {
29
75
// }
30
76
// }
31
77
78
+ // let min = Infinity;
32
79
// bruteforce
33
- for ( let i = 0 ; i < list . length ; i ++ ) {
34
- for ( let j = 0 ; j < list . length ; j ++ ) {
35
- if ( i === j ) continue ;
36
- min = Math . min ( min , Math . abs ( list [ i ] - list [ j ] ) )
37
- }
80
+ // for (let i = 0; i < list.length; i++) {
81
+ // for (let j = 0; j < list.length; j++) {
82
+ // if (i === j) continue;
83
+ // min = Math.min(min, Math.abs(list[i] - list[j]))
84
+ // }
85
+ // }
86
+
87
+ let prev = list . shift ( ) , min = Infinity ;
88
+ while ( list . length > 0 ) {
89
+ let curr = list . shift ( ) ;
90
+ min = Math . min ( min , curr - prev ) ;
91
+ prev = curr ;
38
92
}
39
93
40
- console . log ( list )
41
- console . log ( min )
94
+ return min ;
42
95
} ;
43
96
97
+
44
98
// [4,2,6,1,3]
45
99
// let x = getMinimumDifference(new TreeNode(4,
46
100
// new TreeNode(2, new TreeNode(1), new TreeNode(3)), new TreeNode(6, new TreeNode(5))))
0 commit comments