BFS
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root: return 0
dq = collections.deque()
dq.append(root)
depth = 0
while dq:
depth += 1
for _ in range(len(dq)):
tmp = dq.popleft()
# 遇到一个叶子节点就立马返回高度 没必要再往下了
if not tmp.left and not tmp.right:
return depth
if tmp.left:
dq.append(tmp.left)
if tmp.right:
dq.append(tmp.right)
DFS
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
minLeft = self.minDepth(root.left)
minRight = self.minDepth(root.right)
# 此处需要注意
# 1、 只有当两边都有子节点时,最小高度才为两边节点最小高度 + 1
# 2、当有一侧没有子节点时,最小高度为 另一侧节点的最小高度 + 1 此时 minLeft + minRight + 1 中 minLeft minRight 必有一个为0 所以可直接相加
return minLeft + minRight + 1 if root.left is None or root.right is None else min(minLeft, minRight) + 1