File tree 14 files changed +441
-371
lines changed
solution/0200-0299/0270.Closest Binary Search Tree Value
14 files changed +441
-371
lines changed Load Diff Large diffs are not rendered by default.
Load Diff Large diffs are not rendered by default.
Original file line number Diff line number Diff line change @@ -13,18 +13,18 @@ class Solution {
13
13
public:
14
14
int closestValue (TreeNode* root, double target) {
15
15
int ans = root->val ;
16
- double mi = INT_MAX;
17
- function<void (TreeNode*)> dfs = [&](TreeNode* root ) {
18
- if (!root ) {
16
+ double diff = INT_MAX;
17
+ function<void (TreeNode*)> dfs = [&](TreeNode* node ) {
18
+ if (!node ) {
19
19
return ;
20
20
}
21
- dfs (root->left );
22
- double t = abs (root->val - target);
23
- if (t < mi) {
24
- mi = t;
25
- ans = root->val ;
21
+ double nxt = abs (node->val - target);
22
+ if (nxt < diff || (nxt == diff && node->val < ans)) {
23
+ diff = nxt;
24
+ ans = node->val ;
26
25
}
27
- dfs (root->right );
26
+ node = target < node->val ? node->left : node->right ;
27
+ dfs (node);
28
28
};
29
29
dfs (root);
30
30
return ans;
Original file line number Diff line number Diff line change 8
8
*/
9
9
func closestValue (root * TreeNode , target float64 ) int {
10
10
ans := root .Val
11
- mi := math .MaxFloat64
11
+ diff := math .MaxFloat64
12
12
var dfs func (* TreeNode )
13
- dfs = func (root * TreeNode ) {
14
- if root == nil {
13
+ dfs = func (node * TreeNode ) {
14
+ if node == nil {
15
15
return
16
16
}
17
- dfs (root .Left )
18
- t := math .Abs (float64 (root .Val ) - target )
19
- if t < mi {
20
- mi = t
21
- ans = root .Val
17
+ nxt := math .Abs (float64 (node .Val ) - target )
18
+ if nxt < diff || (nxt == diff && node .Val < ans ) {
19
+ diff = nxt
20
+ ans = node .Val
21
+ }
22
+ if target < float64 (node .Val ) {
23
+ dfs (node .Left )
24
+ } else {
25
+ dfs (node .Right )
22
26
}
23
- dfs (root .Right )
24
27
}
25
28
dfs (root )
26
29
return ans
Original file line number Diff line number Diff line change 16
16
class Solution {
17
17
private int ans ;
18
18
private double target ;
19
- private double mi = Double .MAX_VALUE ;
19
+ private double diff = Double .MAX_VALUE ;
20
20
21
21
public int closestValue (TreeNode root , double target ) {
22
22
this .target = target ;
23
23
dfs (root );
24
24
return ans ;
25
25
}
26
26
27
- private void dfs (TreeNode root ) {
28
- if (root == null ) {
27
+ private void dfs (TreeNode node ) {
28
+ if (node == null ) {
29
29
return ;
30
30
}
31
- dfs (root .left );
32
- double t = Math .abs (root .val - target );
33
- if (t < mi ) {
34
- mi = t ;
35
- ans = root .val ;
31
+ double nxt = Math .abs (node .val - target );
32
+ if (nxt < diff || (nxt == diff && node .val < ans )) {
33
+ diff = nxt ;
34
+ ans = node .val ;
36
35
}
37
- dfs (root .right );
36
+ node = target < node .val ? node .left : node .right ;
37
+ dfs (node );
38
38
}
39
39
}
Original file line number Diff line number Diff line change 12
12
* @return {number }
13
13
*/
14
14
var closestValue = function ( root , target ) {
15
- let mi = Infinity ;
16
- let ans = root . val ;
17
- const dfs = root => {
18
- if ( ! root ) {
15
+ let ans = 0 ;
16
+ let diff = Infinity ;
17
+
18
+ const dfs = node => {
19
+ if ( ! node ) {
19
20
return ;
20
21
}
21
- dfs ( root . left ) ;
22
- const t = Math . abs ( root . val - target ) ;
23
- if ( t < mi ) {
24
- mi = t ;
25
- ans = root . val ;
22
+
23
+ const nxt = Math . abs ( target - node . val ) ;
24
+ if ( nxt < diff || ( nxt === diff && node . val < ans ) ) {
25
+ diff = nxt ;
26
+ ans = node . val ;
26
27
}
27
- dfs ( root . right ) ;
28
+
29
+ node = target < node . val ? node . left : node . right ;
30
+ dfs ( node ) ;
28
31
} ;
32
+
29
33
dfs ( root ) ;
30
34
return ans ;
31
35
} ;
Original file line number Diff line number Diff line change 6
6
# self.right = right
7
7
class Solution :
8
8
def closestValue (self , root : Optional [TreeNode ], target : float ) -> int :
9
- def dfs (root ):
10
- if root is None :
9
+ def dfs (node : Optional [ TreeNode ] ):
10
+ if node is None :
11
11
return
12
- dfs ( root . left )
13
- nonlocal ans , mi
14
- t = abs ( root .val - target )
15
- if t < mi :
16
- mi = t
17
- ans = root .val
18
- dfs (root . right )
12
+ nxt = abs ( target - node . val )
13
+ nonlocal ans , diff
14
+ if nxt < diff or ( nxt == diff and node .val < ans ):
15
+ diff = nxt
16
+ ans = node . val
17
+ node = node . left if target < node .val else node . right
18
+ dfs (node )
19
19
20
- ans , mi = root .val , inf
20
+ ans = 0
21
+ diff = inf
21
22
dfs (root )
22
23
return ans
Original file line number Diff line number Diff line change 13
13
*/
14
14
15
15
function closestValue ( root : TreeNode | null , target : number ) : number {
16
- if ( ! root ) return Number . NaN ;
17
-
18
- let res = 0 ;
16
+ let ans = 0 ;
19
17
let diff = Number . POSITIVE_INFINITY ;
20
18
21
- const dfs = ( node : TreeNode | null ) : undefined => {
22
- if ( ! node ) return ;
23
-
24
- const next = Math . abs ( target - node . val ) ;
19
+ const dfs = ( node : TreeNode | null ) : void => {
20
+ if ( ! node ) {
21
+ return ;
22
+ }
25
23
26
- if ( next < diff || ( next === diff && node . val < res ) ) {
27
- diff = next ;
28
- res = node . val ;
24
+ const nxt = Math . abs ( target - node . val ) ;
25
+ if ( nxt < diff || ( nxt === diff && node . val < ans ) ) {
26
+ diff = nxt ;
27
+ ans = node . val ;
29
28
}
30
29
31
30
node = target < node . val ? node . left : node . right ;
32
-
33
- return dfs ( node ) ;
31
+ dfs ( node ) ;
34
32
} ;
35
33
36
34
dfs ( root ) ;
37
-
38
- return res ;
35
+ return ans ;
39
36
}
Original file line number Diff line number Diff line change @@ -13,18 +13,14 @@ class Solution {
13
13
public:
14
14
int closestValue (TreeNode* root, double target) {
15
15
int ans = root->val ;
16
- double mi = INT_MAX;
16
+ double diff = INT_MAX;
17
17
while (root) {
18
- double t = abs (root->val - target);
19
- if (t < mi || (t == mi && root->val < ans)) {
20
- mi = t ;
18
+ double nxt = abs (root->val - target);
19
+ if (nxt < diff || (nxt == diff && root->val < ans)) {
20
+ diff = nxt ;
21
21
ans = root->val ;
22
22
}
23
- if (root->val > target) {
24
- root = root->left ;
25
- } else {
26
- root = root->right ;
27
- }
23
+ root = target < root->val ? root->left : root->right ;
28
24
}
29
25
return ans;
30
26
}
Original file line number Diff line number Diff line change 8
8
*/
9
9
func closestValue (root * TreeNode , target float64 ) int {
10
10
ans := root .Val
11
- mi := math .MaxFloat64
11
+ diff := math .MaxFloat64
12
12
for root != nil {
13
- t := math .Abs (float64 (root .Val ) - target )
14
- if t < mi || (t == mi && root .Val < ans ) {
15
- mi = t
13
+ nxt := math .Abs (float64 (root .Val ) - target )
14
+ if nxt < diff || (nxt == diff && root .Val < ans ) {
15
+ diff = nxt
16
16
ans = root .Val
17
17
}
18
18
if float64 (root .Val ) > target {
Original file line number Diff line number Diff line change 16
16
class Solution {
17
17
public int closestValue (TreeNode root , double target ) {
18
18
int ans = root .val ;
19
- double mi = Double .MAX_VALUE ;
19
+ double diff = Double .MAX_VALUE ;
20
20
while (root != null ) {
21
- double t = Math .abs (root .val - target );
22
- if (t < mi || (t == mi && root .val < ans )) {
23
- mi = t ;
21
+ double nxt = Math .abs (root .val - target );
22
+ if (nxt < diff || (nxt == diff && root .val < ans )) {
23
+ diff = nxt ;
24
24
ans = root .val ;
25
25
}
26
- if (root .val > target ) {
27
- root = root .left ;
28
- } else {
29
- root = root .right ;
30
- }
26
+ root = target < root .val ? root .left : root .right ;
31
27
}
32
28
return ans ;
33
29
}
Original file line number Diff line number Diff line change 13
13
*/
14
14
var closestValue = function ( root , target ) {
15
15
let ans = root . val ;
16
- let mi = Number . MAX_VALUE ;
16
+ let diff = Infinity ;
17
17
while ( root ) {
18
- const t = Math . abs ( root . val - target ) ;
19
- if ( t < mi || ( t === mi && root . val < ans ) ) {
20
- mi = t ;
18
+ const nxt = Math . abs ( root . val - target ) ;
19
+ if ( nxt < diff || ( nxt === diff && root . val < ans ) ) {
20
+ diff = nxt ;
21
21
ans = root . val ;
22
22
}
23
- if ( root . val > target ) {
24
- root = root . left ;
25
- } else {
26
- root = root . right ;
27
- }
23
+ root = target < root . val ? root . left : root . right ;
28
24
}
29
25
return ans ;
30
26
} ;
Original file line number Diff line number Diff line change 6
6
# self.right = right
7
7
class Solution :
8
8
def closestValue (self , root : Optional [TreeNode ], target : float ) -> int :
9
- ans , mi = root .val , inf
9
+ ans , diff = root .val , inf
10
10
while root :
11
- t = abs (root .val - target )
12
- if t < mi or (t == mi and root .val < ans ):
13
- mi = t
11
+ nxt = abs (root .val - target )
12
+ if nxt < diff or (nxt == diff and root .val < ans ):
13
+ diff = nxt
14
14
ans = root .val
15
- if root .val > target :
16
- root = root .left
17
- else :
18
- root = root .right
15
+ root = root .left if target < root .val else root .right
19
16
return ans
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
+ function closestValue ( root : TreeNode | null , target : number ) : number {
16
+ let ans = 0 ;
17
+ let diff = Number . POSITIVE_INFINITY ;
18
+
19
+ while ( root ) {
20
+ const nxt = Math . abs ( root . val - target ) ;
21
+ if ( nxt < diff || ( nxt === diff && root . val < ans ) ) {
22
+ diff = nxt ;
23
+ ans = root . val ;
24
+ }
25
+ root = target < root . val ? root . left : root . right ;
26
+ }
27
+ return ans ;
28
+ }
You can’t perform that action at this time.
0 commit comments