问题:
题目来源:力扣(LeetCode)
难度:简单
分析:
使用递归和层序遍历两种方法实现。
与最大深度不同的是,最小深度不是下探到最下面一层,而是找到最浅的一层,最浅的一层的判断依据是一个节点的左右子节点均为空。同时要注意只有一个子树的情况。
解决方法:
1:递归
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
if not root.left and not root.right:
return 1
min_depth = float('inf')
if root.left:
min_depth = min(self.minDepth(root.left), min_depth)
if root.right:
min_depth = min(self.minDepth(root.right), min_depth)
return min_depth + 1
2:层序遍历
class Solution:
def minDepth(self, root: TreeNode) -> int:
queue, res = [root,], 0
if not root: return 0
while queue:
res += 1
for _ in range(len(queue)):
node = queue.pop(0)
if not node: continue
if not node.left and not node.right:
return res
else:
queue.append(node.left)
queue.append(node.right)
return res