声明:
今天是第25道题。给定一个二叉树,找出其最小深度。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树
[3,9,20,null,null,15,7]
,3 / \ 9 20 / \ 15 7返回它的最小深度 2
解法1。递归做法,就是拆解不同情况,先把简单的情况用if语句判断返回,其他情况递归返回高度最小值。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root is None: # 父节点为空,高度为0
return 0
elif root.left is None and root.right is None: # 只有1个父节点,高度为0
return 1
elif root.left is None: # 左子树为空,返回右子树最小高度
return self.minDepth(root.right)+1
elif root.right is None: # 右子树为空,返回左子树最小高度
return self.minDepth(root.left)+1
else: # 递归返回左右子树最小高度
return min(self.minDepth(root.left),self.minDepth(root.right))+1
解法2。迭代的方法,但我没看太懂,先贴在这里,以后慢慢看。。
class Solution:
def minDepth(self, root):
# V 2.0,能提交
if root is None:
return 0
p = [root]
current_level_num = 1
next_level_num = 0
i = 1
while p:
current = p.pop(0)
current_level_num-=1
if current.left is None and current.right is None:
return i
if current.left:
next_level_num+=1
p.append(current.left)
if current.right:
next_level_num+=1
p.append(current.right)
if current_level_num == 0:
i += 1
current_level_num = next_level_num
next_level_num = 0
结尾
解法1:https://blog.csdn.net/qq_34364995/article/details/80427232
解法2:https://blog.csdn.net/qq_34364995/article/details/80427232