104、二叉树的最大深度*
# 给定一个二叉树 root ,返回其最大深度。
# 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def maxDepth(self, root):
"""
:type root: Optional[TreeNode]
:rtype: int
"""
#空就返回0
if not root:
return 0
#递归
return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1
递归三部曲:
- 确定递归函数返回值及其参数
- 确定递归终止条件
- 确定单层递归的逻辑
108、将有序数组转换为二叉搜索树*
# 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution(object):
#自己
def sortedArrayToBST(self, nums):
"""
将一个按照升序排序的数组转换为一棵高度平衡的二叉搜索树。
参数:
nums: 一个包含整数的列表,表示已排序的数组。
返回值:
返回构建的二叉搜索树的根节点。
"""
# 当数组为空时,返回None,表示空树
if not nums:
return None
# 找到数组的中间位置,用作二叉搜索树的根节点
mid = len(nums) // 2
root = TreeNode(nums[mid])
# 递归处理数组的左半部分,构建左子树
root.left = self.sortedArrayToBST(nums[:mid])
# 递归处理数组的右半部分,构建右子树
root.right = self.sortedArrayToBST(nums[mid+1:])
# 返回构建的二叉搜索树的根节点
return root
#leecode
def sortedArrayToBST(self, nums):
"""
将一个按照升序排序的数组转换为一棵高度平衡的二叉搜索树。
参数:
nums: 一个包含整数的列表,表示已排序的数组。
返回值:
返回转换后的二叉搜索树的根节点。
"""
# 定义一个内部辅助函数helper,用于递归构建二叉搜索树
def helper(left, right):
# 当左指针大于右指针时,说明已经遍历完数组,返回None
if left > right:
return None
# 计算当前数组的中间索引
mid = (left + right) // 2
# 以中间元素作为根节点创建TreeNode实例
root = TreeNode(nums[mid])
# 递归构建左子树,范围为[left, mid - 1]
root.left = helper(left, mid - 1)
# 递归构建右子树,范围为[mid + 1, right]
root.right = helper(mid + 1, right)
# 返回构建好的根节点
return root
# 调用helper函数,初始范围为整个数组,返回构建的二叉搜索树的根节点
return helper(0, len(nums) - 1)