python题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 提示: 树中节点数的范围在 [0, 105] 内 -1000 <= Node.val <= 1000 例如: 输入 结果 3 9 20 null null 15 7 2
时间: 2024-02-19 07:58:40 浏览: 70
好的,这是一道关于二叉树的算法题目。你可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决这个问题。这里给出一种使用BFS的解法:
首先,我们需要定义一个数据结构来保存每个节点的深度信息。可以使用一个元组 (node, depth) 来表示节点和其深度信息。初始时,将根节点和深度0保存到一个队列中。
然后,我们进行BFS遍历。每次从队列中取出一个节点,并检查它是否为叶子节点。如果是叶子节点,则返回其深度信息;如果不是,则将其子节点和其深度信息加入到队列中。
当队列为空时,说明已经遍历完所有节点,但是还没有找到叶子节点。此时返回最小深度,即遍历到的最后一个节点的深度信息。
下面是Python代码实现:
```python
def minDepth(root):
if not root:
return 0
queue = [(root, 1)]
while queue:
node, depth = queue.pop(0)
if not node.left and not node.right:
return depth
if node.left:
queue.append((node.left, depth + 1))
if node.right:
queue.append((node.right, depth + 1))
```
其中,root是二叉树的根节点,如果根节点为空,则返回0。queue是一个列表,用来保存每个节点的深度信息。初始时,将根节点和深度1加入到队列中。
在循环中,每次从队列中取出一个节点,并检查它是否为叶子节点。如果是叶子节点,则返回其深度信息;如果不是,则将其子节点和其深度信息加入到队列中。
当队列为空时,说明已经遍历完所有节点,但是还没有找到叶子节点。此时返回最小深度,即遍历到的最后一个节点的深度信息。
对于输入的例子,可以构造如下二叉树:
```
3
/ \
9 20
/ \
15 7
```
使用上述算法,可以得到最小深度为2,符合要求。
阅读全文