二叉树的最小深度

叶子节点是指没有子节点的节点。

深度优先

function minDepth(root: TreeNode | null): number {
  if (root === null) return 0

  if (root.left === null) {
    return minDepth(root.right) + 1
  } else if (root.right === null) {
    return minDepth(root.left) + 1
  } else {
    return Math.min(minDepth(root.left), minDepth(root.right)) + 1
  }
}

广度优先

层层遍历,当其中一个为叶子节点时即可返回。

function minDepth(root: TreeNode | null): number {
  if (root === null) return 0

  const queue: [TreeNode, number][] = [[root, 1]]
  while (queue.length) {
    const [node, depth] = queue.shift()!
    if (!node.left && !node.right) return depth

    if (node.left) {
      queue.push([node.left, depth + 1])
    }
    if (node.right) {
      queue.push([node.right, depth + 1])
    }
  }
}