Skip to content

Commit 49af000

Browse files
committed
671. 二叉树中第二小的节点
1 parent 7900788 commit 49af000

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@
155155
|654|[最大二叉树](https://leetcode.cn/problems/maximum-binary-tree/)|[JavaScript](./algorithms/maximum-binary-tree.js)|Medium|
156156
|657|[机器人能否返回原点](https://leetcode.cn/problems/robot-return-to-origin/)|[JavaScript](./algorithms/robot-return-to-origin.js)|Easy|
157157
|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|
158159
|682|[棒球比赛](https://leetcode.cn/problems/baseball-game/)|[JavaScript](./algorithms/baseball-game.js)|Easy|
159160
|687|[最长同值路径](https://leetcode.cn/problems/longest-univalue-path/)|[JavaScript](./algorithms/longest-univalue-path.js)|Medium|
160161
|690|[员工的重要性](https://leetcode.cn/problems/employee-importance/)|[JavaScript](./algorithms/employee-importance.js)|Medium|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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+
}

0 commit comments

Comments
 (0)