一、主题
难度:简单
涉及知识:树、深度优先搜索、广度优先搜索
题目地址:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/
题目内容:
给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2.
二、解题
- 用例
题目给定用例 [1,2,8,3,4,5,6,7] 输入方法的root元数据: let root = { val: 1, left: { val: 2, left: null, right: null }, right: { val: 3, left: { val: 4, left: null, right: { val: 5, left: { val: 6, left: null, right: null }, right: { val: 7, left: null, right: null } }, }, right: { val: 8, left: null, right: null } } }; - 解题步骤
var minDepth = function (root) { if (!root) { return 0; } //先遍历所有子节点,并比对各条路进行比对 if (!root.left) { return minDepth(root.right) + 1; } if (!root.right) { return minDepth(root.left) + 1; } return Math.min(minDepth(root.left), minDepth(root.right)) + 1; } - LeetCode Submit
执行用时 :76 ms, 在所有 JavaScript 提交中击败了99.10%的用户内存消耗 :37.1 MB, 在所有 JavaScript 提交中击败了66.05%的用户
三、解析
- 递归思路:
- 通过minDepth()方法遍历每条路径(优先从左子节点开始)
- 直到该路径到底(root.left 或 right为空),则会获得该路径的最大高度
- return进入Math.min()方法进行比对,取最小值
- 为何要+1
Math:JS 中的内置对象,具有数学常数和函数的属性和方法。Math.min()详细介绍