1. 问题背景与核心概念解析
在算法与数据结构领域,二叉搜索树(BST)是一种基础且重要的数据结构。它满足以下性质:
- 左子树所有节点的值小于根节点
- 右子树所有节点的值大于根节点
- 左右子树也分别是二叉搜索树
而"高度平衡"的BST是指任意节点的左右子树高度差不超过1。将有序数组转换为高度平衡BST这个问题,实际上考察的是如何利用有序数组的特性(即中序遍历结果)来构建平衡的二叉搜索树。
这个问题在技术面试中经常出现,比如LeetCode第108题。理解这个转换过程不仅能帮助我们掌握BST的基本操作,还能深入理解分治算法的应用场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从有序数组到BST的转换原理
2.1 有序数组与BST的中序遍历关系
一个关键观察是:BST的中序遍历结果就是一个有序数组。这意味着如果我们有一个有序数组,它实际上就是某个BST的中序遍历结果。我们的任务就是根据这个中序遍历结果,"逆向"构建出原始的BST。
但这里有个问题:同一个有序数组可能对应多个不同的BST结构。例如数组[1,2,3]可以对应以下两种BST:
code复制 2 1
/ \ \
1 3 2
\
3
2.2 如何确保高度平衡
为了确保BST是高度平衡的,我们需要在构建过程中保证左右子树的节点数量尽可能相等。这自然引导我们采用分治策略:
- 选择数组中间元素作为根节点
- 左半部分数组递归构建左子树
- 右半部分数组递归构建右子树
这种方法能保证左右子树的节点数最多相差1,从而满足高度平衡的要求。
3. 具体实现步骤详解
3.1 递归实现方案
以下是Python的递归实现代码:
python复制class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def sortedArrayToBST(nums):
def helper(left, right):
