二叉树中第二小的节点:root 总是小于子节点,找第二小的值

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

题意:

  • 给定一个特殊的二叉树:
    • 每个节点要么有 0 个子节点
    • 要么有 2 个子节点
  • 如果一个节点有两个子节点
    • 那么这个节点的值等于两个子节点中较小的那个值
  • 需要找到整棵树中第二小的值,如果不存在第二小的值则返回 -1

思路:

  1. 根节点一定是整棵树中最小的值
  2. 第二小的值一定比根节点值大
  3. 找到比根节点大的最小值

重点:

  • 分解问题的思路:findMin
var findSecondMinimumValue = function (root) { if (!root) return -1; // 树为空 if (!root.left && !root.right) return -1; // 没有子节点 // 获取根节点的值(最小值) const rootValue = root.val; function findMin(node) { if (!node) return -1; // 如果当前节点值大于根节点值,直接返回当前值 if (node.val > rootValue) return node.val; const left = findMin(node.left); const right = findMin(node.right); // 如果左子树没找到(返回-1),返回右子树的结果 if (left === -1) return right; // 如果右子树没找到(返回-1),返回左子树的结果 if (right === -1) return left; // 如果左右子树都找到了值,返回较小的那个 return Math.min(left, right); } return findMin(root); };