111 二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree
解决方案:
提供思路
1) 如果二叉树为空,则深度为 0。如果二叉树只有根结点,则深度为 1。
如果二叉树的左子树和右子树中至少有一个不为空,则首先计算左子树和右子树的最小深度,然后计算二叉树的最小深度。如果只有一个子树不为空,则二叉树的最小深度为非空子树的最小深度加 1;如果两个子树都不为空,则二叉树的最小深度为两个子树的最小深度的最小值加 1。由于非空子树的最小深度可以使用同样的方式计算。因此可以使用深度优先搜索计算二叉树的最小深度。
计算二叉树的最小深度的过程是一个递归的过程,递归的终止条件是:二叉树为空,此时二叉树的最小深度为 0;或者二叉树只有根结点,此时二叉树的最小深度为 1。对于其余情况,首先判断左子树和右子树是否为空,然后递归地计算非空子树的最小深度,最后计算二叉树的最小深度。
2) 也可以使用广度优先搜索计算二叉树的最小深度。
广度优先搜索需要使用队列存储待访问的结点,初始时将根结点入队列。为了计算二叉树的最小高度,在广度优先搜索的过程中需要维护深度的信息,需要确保每一轮访问的结点为同一层的全部结点。
初始时,队列内只有根结点,是同一层的全部结点。每一轮访问结点之前需要首先得到队列内的元素个数,此时队列内的元素为同一层的全部结点,然后访问这些结点,并将这些结点的非空子结点入队列。一轮访问结束之后,当前层的全部结点都已经出队列并被访问,此时队列内的元素为下一层的全部结点,下一轮访问时即可访问下一层的全部结点。使用上述做法,可以确保每一轮访问的结点为同一层的全部结点。
在确保每一轮访问的结点为同一层的全部结点的情况之下,根据访问的轮数即可得到结点的深度,其中根结点的深度为 1。对于第一个访问到的叶结点,其所在深度即为二叉树的最小深度。
上代码:
//1
public class Solution
{
public int MinDepth(TreeNode root)
{
if (root == null)
{
return 0;
}
if (root.left == null && root.right == null)
{
return 1;
}
if (root.left == null)
{
return MinDepth(root.right) + 1;
}
if (root.right == null)
{
return MinDepth(root.left) + 1;
}
return Math.Min(MinDepth(root.left), MinDepth(root.right)) + 1;
}
}
//2
public class Solution
{
public int MinDepth(TreeNode root)
{
if (root == null)
{
return 0;
}
int depth = 0;
bool reachLeaf = false;
Queue<TreeNode> queue = new Queue<TreeNode>();
queue.Enqueue(root);
while (queue.Count > 0 && !reachLeaf)
{
depth++;
int size = queue.Count;
for (int i = 0; i < size; i++)
{
TreeNode node = queue.Dequeue();
if (node.left == null && node.right == null)
{
reachLeaf = true;
break;
}
if (node.left != null)
{
queue.Enqueue(node.left);
}
if (node.right != null)
{
queue.Enqueue(node.right);
}
}
}
return depth;
}
}
以上是碰到的第一百一十一题,后续持续更新。感觉对你有帮助的小伙伴可以帮忙点个赞噢!

该文介绍了如何计算二叉树的最小深度,提供了两种方法:深度优先搜索(DFS)和广度优先搜索(BFS)。对于空树,最小深度为0;对于只有根节点的树,最小深度为1。对于非空树,通过递归或队列遍历计算左右子树的最小深度来确定整个树的最小深度。
1969

被折叠的 条评论
为什么被折叠?



