Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
Note: A leaf is a node with no children.
Example:
Given binary tree [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
return its minimum depth = 2.
<思路一>我第一次用BFS做的,思路就是遍历每一层节点,每次depth+1。
如果这个节点没有左右孩子节点,将depth保存在dep列表中,最后返回dep的最小值。
如果有左孩子或右孩子,将孩子节点保存在queue中,等待下一层遍历时使用。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
level = [root]
depth = 0
dep = []
if root is None:
return 0
while level:
queue=[]
depth +=1
for node in level:
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
if node.left is None and node.right is None:
dep.append(depth)
level = queue
return min(dep)
<思路二>用递归的方式,也比较简单
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root is None:
return 0
if root.left and root.right:
return min(self.minDepth(root.left), self.minDepth(root.right))+1
if root.left:
return self.minDepth(root.left) + 1
if root.right:
return self.minDepth(root.right) + 1
else:
return 1