671. 二叉树中第二小的节点

124 阅读1分钟

题目描述

leetcode-cn.com/problems/se…

分析

两点:

此题需要注意优化的条件,最小值是向上传递的

从上到下是最小值到最大值

解题思路

根据分析,只要从上向下找就可以了,拿一个变量记录结果,初始值为 -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
};