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],
1.DFS(深度优先搜索)
注意: 一个节点的最小高度不一定是两个子树的最小高度中较小的,当一个子树为空时,该节点的最小高度等于另一个子树的最小高度。
class Solution(object):
def minDepth(self, root):
if not root:
return 0
if not root.left:
return 1+self.minDepth(root.right)
if not root.right:
return 1+self.minDepth(root.left)
return 1+min(self.minDepth(root.left),self.minDepth(root.right))
2.BFS(广度优先搜索) --使用队列
(1):
class Solution(object):
def minDepth(self, root):
if not root:
return 0
queue = collections.deque()
queue.append(root)
depth=0
while queue:
depth += 1
for _ in range(len(queue)):
node = queue.popleft()
if not node.left and not node.right:
return depth
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return depth
(2):
class Solution(object):
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
depth = 0
q = [root]
while len(q) != 0:
depth += 1
for i in range(0, len(q)):
if not q[0].left and not q[0].right:
return depth
if q[0].left:
q.append(q[0].left)
if q[0].right:
q.append(q[0].right)
del q[0]
return depth