「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。
题目
链接:leetcode-cn.com/problems/mi…
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
**说明:**叶子节点是指没有子节点的节点。
示例 1:
**输入:**root = [3,9,20,null,null,15,7] **输出:**2
示例 2:
**输入:**root = [2,null,3,null,4,null,5,null,6] **输出:**5
提示:
- 树中节点数的范围在
[0, 105]内 -1000 <= Node.val <= 1000
思路1 BFS
1. 解题思路
- 求最小深度,考虑使用广度优先遍历
- 在广度优先遍历过程中,遇到叶子节点,停止遍历,返回节点层级
解题步骤:
- 广度优先遍历整棵树,并记录每个节点的层级
- 遇到叶子节点,返回节点层级,停止遍历
2. 代码实现
- JavaScript
- TypeScript
var minDepth = function(root) {
if(!root) { return 0; }
const q = [[root, 1]];
while(q.length) {
const [n, l] = q.shift()
if(!n.left && !n.right) {
return l
}
if(n.left) q.push([n.left, l + 1])
if(n.right) q.push([n.right, l + 1])
}
};
function minDepth(root: TreeNode | null): number {
if(!root) { return 0; }
const queue: [TreeNode, number][] = [[root, 1]];
while(queue.length) {
const [n, l] = queue.shift();
if(!n.left && !n.right) {
return l
}
if(n.left) queue.push([n.left, l + 1])
if(n.right) queue.push([n.right, l + 1])
}
};
解法2:
function minDepth(root: TreeNode | null): number {
if (!root) return 0;
const queue = [root];
let deep = 1;
while (queue.length) {
const levelSize = queue.length;
for (let i = 0; i < levelSize; i++) {
const n = queue.shift();
if (!n.left && !n.right) return deep;
n.left && queue.push(n.left);
n.right && queue.push(n.right);
}
if (queue.length) deep += 1;
}
return deep;
};
3. 复杂度分析
时间复杂度O(n), 空间复杂度O(n)
思路2 DFS
1. 解题思路
新建一个变量,记录最小深度
深度优先遍历整棵树,并记录每个节点的层级,同时不断刷新最小深度这个变量
遍历结束返回最小深度这个变量
2. 代码实现
- JavaScript
- TypeScript
function minDepth(root) {
if (!root) return 0;
let deep = Infinity;
const dfs = (n, l) => {
if (!n) return;
if (!n.left && !n.right) {
deep = Math.min(deep, l);
}
n.left && dfs(n.left, l + 1);
n.right && dfs(n.right, l + 1);
}
dfs(root, 1);
return deep;
};
function minDepth(root: TreeNode | null): number {
if (!root) return 0;
let deep = Infinity;
const dfs = (n, l) => {
if (!n) return;
if (!n.left && !n.right) {
deep = Math.min(deep, l);
}
n.left && dfs(n.left, l + 1);
n.right && dfs(n.right, l + 1);
}
dfs(root, 1);
return deep;
};
3. 复杂度分析
时间复杂度O(n), 空间复杂度O(n)