给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最小深度 2.
思路:
后序遍历(左右中)
递归
注意:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意是叶子节点。
左右孩子都是None的节点是叶子结点。
先确定递归的终止条件:遇到空节点,此时高度为0,return 0
确定递归的单层逻辑:
【左】获取 左子树的最小高度
【右】获取 右子树的最小高度
【中】【注意这里和最大高度不同点:最大高度就是取左右子树的最大值,但是这里不能这样,如果左边为None,右边有值,那么就 return 1+右边子树的最小高度
同理,如果左子树不为空,右子树为空,那么return 1+左子树最小高度
剩下一种情况:左右子树都不为空,return 1+min(左子树最小高度,右子树最小高度)
最后 return result】
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
return self.getDepth(root)
def getDepth(self, node):
if node is None:
return 0
leftDepth = self.getDepth(node.left)
rightDepth = self.getDepth(node.right)
if node.left is None and node.right is not None:
return 1 + rightDepth
if node.left is not None and node.right is None:
return 1 + leftDepth
result = 1 + min(leftDepth, rightDepth)
return result