File tree 2 files changed +70
-0
lines changed
2 files changed +70
-0
lines changed Original file line number Diff line number Diff line change 155
155
| 654| [ 最大二叉树] ( https://leetcode.cn/problems/maximum-binary-tree/ ) | [ JavaScript] ( ./algorithms/maximum-binary-tree.js ) | Medium|
156
156
| 657| [ 机器人能否返回原点] ( https://leetcode.cn/problems/robot-return-to-origin/ ) | [ JavaScript] ( ./algorithms/robot-return-to-origin.js ) | Easy|
157
157
| 669| [ 修剪二叉搜索树] ( https://leetcode.cn/problems/trim-a-binary-search-tree/ ) | [ JavaScript] ( ./algorithms/trim-a-binary-search-tree.js ) | Medium|
158
+ | 671| [ 二叉树中第二小的节点] ( https://leetcode.cn/problems/second-minimum-node-in-a-binary-tree/ ) | [ JavaScript] ( ./algorithms/second-minimum-node-in-a-binary-tree.js ) | Easy|
158
159
| 682| [ 棒球比赛] ( https://leetcode.cn/problems/baseball-game/ ) | [ JavaScript] ( ./algorithms/baseball-game.js ) | Easy|
159
160
| 687| [ 最长同值路径] ( https://leetcode.cn/problems/longest-univalue-path/ ) | [ JavaScript] ( ./algorithms/longest-univalue-path.js ) | Medium|
160
161
| 690| [ 员工的重要性] ( https://leetcode.cn/problems/employee-importance/ ) | [ JavaScript] ( ./algorithms/employee-importance.js ) | Medium|
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * function TreeNode(val, left, right) {
4
+ * this.val = (val===undefined ? 0 : val)
5
+ * this.left = (left===undefined ? null : left)
6
+ * this.right = (right===undefined ? null : right)
7
+ * }
8
+ */
9
+ /**
10
+ * 671. 二叉树中第二小的节点
11
+ * @param {TreeNode } root
12
+ * @return {number }
13
+ */
14
+ var findSecondMinimumValue = function ( root ) {
15
+ // 哈希集合去重
16
+ const set = new Set ( ) ;
17
+ const dfs = ( root ) => {
18
+ if ( root ) {
19
+ set . add ( root . val ) ;
20
+ dfs ( root . left ) ;
21
+ dfs ( root . right ) ;
22
+ }
23
+ }
24
+ dfs ( root ) ;
25
+
26
+ if ( set . size < 2 ) return - 1 ;
27
+
28
+ // 两个变量 & 一次遍历 找到次小值
29
+
30
+ let first = Number . MAX_VALUE ; // 第一小值
31
+ let second = Number . MAX_VALUE ; // 第二小值
32
+ // 1,3,-1,2
33
+ set . forEach ( val => {
34
+ if ( val <= first ) {
35
+ second = first ;
36
+ first = val ;
37
+ } else if ( val <= second ) {
38
+ second = val ;
39
+ }
40
+ } )
41
+ return second ;
42
+ } ;
43
+
44
+ var findSecondMinimumValue2 = function ( root ) {
45
+ // 递归
46
+
47
+ // root.val = min(root.left.val, root.right.val)
48
+ // 由于这个条件总是成立, 因此: 根节点必然是全局最小值
49
+
50
+ let result = - 1 ;
51
+
52
+ const dfs = ( root , curr ) => {
53
+ if ( root ) {
54
+ if ( root . val !== curr ) {
55
+ if ( result === - 1 ) { // 第一次赋值
56
+ result = root . val ;
57
+ } else {
58
+ result = Math . min ( result , root . val ) ;
59
+ }
60
+ return ;
61
+ }
62
+ dfs ( root . left , curr ) ;
63
+ dfs ( root . right , curr ) ;
64
+ }
65
+ }
66
+ dfs ( root , root . val ) ;
67
+
68
+ return result ;
69
+ }
You can’t perform that action at this time.
0 commit comments