题目描述
分析
两点:
此题需要注意优化的条件,最小值是向上传递的
从上到下是最小值到最大值
解题思路
根据分析,只要从上向下找就可以了,拿一个变量记录结果,初始值为 -1
每个节点跟 root.val 比,从 root 开始,不断对比,如果:
还没有记录结果,记录下来当前节点的值,作为最小值~
如果已经记录了值,就要比较记录值和当前节点值的大小,做更新
这是因为有左右节点的情况
代码
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var findSecondMinimumValue = function(root) {
let ans = -1
const dfs = (root, cur) => {
if (!root) return
if (root.val !== cur) {
if (ans === -1) ans = root.val
else ans = Math.min(ans, root.val)
}
root.left && dfs(root.left, cur)
root.right && dfs(root.right, cur)
}
dfs(root, root.val)
return ans
};