题目链接
https://leetcode.com/problems/minimum-depth-of-binary-tree/
题目原文
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.
题目翻译
给定一个二叉树,求其最小深度。
最小深度指的是,从根节点到最近的叶子节点的最近路径的节点个数。
思路方法
思路一
广度优先搜索(BFS),用队列求解。
代码
# 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 == 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
思路二
深度优先搜索(DFS),用递归求解。注意,一个节点的最小高度不一定是两个子树的最小高度中较小的,当一个子树为空时,该节点的最小高度等于另一个子树的最小高度。
代码
# 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 == None:
return 0
if not root.left:
return 1 + self.minDepth(root.right)
elif not root.right:
return 1 + self.minDepth(root.left)
else:
return 1 + min(self.minDepth(root.left), self.minDepth(root.right))
说明
作为这个问题的对比,类似问题:Maximum Depth of Binary Tree
PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51337522