一、题目内容 简单
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例1:
输入:root =
[3,9,20,null,null,15,7]输出:2
示例2:
输入:root =
[2,null,3,null,4,null,5,null,6]输出:5
提示:
- 树中节点数的范围在 [0, 105] 内
 - 
二、解题思路

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意是叶子节点。
假设 M 节点的左右子节点为 A,B。
当 A,B 都不存在时,M 节点的最小深度是 1
当 A,B 只有一个存在时,选择存在的节点的深度,不存在的深度是 0,存在的深度肯定大
当 A,B 都存在时,选择两个节点中最小的深度。三、具体代码
/*** @param {TreeNode} root* @return {number}*/var minDepth = function (root) {if (!root) return 0;const dfs = (node) => {if (!node) return 0const leftDeep = dfs(node.left)const rightDeep = dfs(node.right)if (leftDeep > 0 && rightDeep > 0) return Math.min(leftDeep, rightDeep) + 1if (leftDeep > 0 || rightDeep > 0) return Math.max(leftDeep, rightDeep) + 1return 1}return dfs(root)};
四、其他解法
迭代法
/*** @param {TreeNode} root* @return {number}*/var minDepth = function (root) {if (!root) return 0const queue = [root]let minDeep = 0while (queue.length) {const len = queue.length // 记录下这一层的节点数minDeep++ // 进入下一层,就加 1// 把这一层的节点 的 左右子节点都放入队列。同时移除这一层的节点for (let i = 0; i < len; i++) {const node = queue.shift()if (node.left) queue.push(node.left)if (node.right) queue.push(node.right)if (!node.left && !node.right) return minDeep // 如果左右子节点都不存在,说明该节点就是最小深度这一层的节点}}return minDeep};
 

