LeetCode:111 求二叉树的最小深度
给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2.
思路: 类似于求二叉树的高度, 递归+层次遍历方法
定义二叉树:
# 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: TreeNode) -> int:
if not root: return 0
left = self.minDepth(root.left)
right = self.minDepth(root.right)
# 去除 root+ left/right 特殊情况
return 1 + left+ right if (left==0 or right==0) else 1+min(left + right)
层次遍历法:
def minDepth2(self, root: TreeNode) -> int:
if not root: return 0
cur_level=[root]
min_deep=1
while cur_level:
next_level=[]
for node in cur_level:
if node.left: next_level.append(node.left)
if node.right: next_level.append(node.right)
# 保证此时,才是叶子节点
if not node.left and not node.right: return min_deep
min_deep +=1
cur_level = next_level